DredWulf
@DredWulf

Как сделать «статичной» переопределенную функцию наследуемую из интерфейсов?

Ситуация такая. Есть 2 интрфейса, которые имеют одинаковую функцию, с одинаковой реализацией. Следовательно, классу необходимо реализовать эту функцию

interface Animal{
    fun voice(){
        println("звуки природы......")
    }
}

interface Cat {
    fun voice(){
        println("мяу......")
    }
}

// здесь мне бы хотелось, чтобы класс Tiger использовал реализацию из интрфейса Cat
// НО ТАКЖЕ МНЕ ХОТЕЛОСЬ БЫ ИСПОЛЬЗОВАТЬ ЭТУ ФУНКЦИЮ БЕЗ СОЗДАНИЯ ОБЪЕКТА
class Tiger : Animal, Cat {
    companion object {
        override fun voice() {
            super<Cat>.voice()
        }
    }
}


ошибка: Not an immediate supertype (Не непосредственный супертип)
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
Не знаю, зачем ты такое хочешь, это странно, на мой взгляд. Но можно это заставить работать, достаточно сделать так, чтобы companion object имплементировал этот интерфейс:
class Tiger {
    companion object : Animal, Cat {
        override fun voice() {
            super<Cat>.voice()
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы