2016-11-13 2 views
0

Попытка выяснить с Котлин в прошлые дни, прочитал документ и нашел один пример. В нижней части article:Наследование в Котлине

interface A { 
    fun foo() { print("A") } 
    fun bar() 
} 

interface B { 
    fun foo() { print("B") } 
    fun bar() { print("bar") } 
} 

class C : A { 
    override fun bar() { print("bar") } 
} 

class D : A, B { 
    override fun foo() { 
     super<A>.foo() 
     super<B>.foo() 
    } 
} 

Теперь, если мы получим конкретный класс С из А, мы, очевидно, должны переопределить бар() и обеспечить реализацию. И если мы выводим D из A и B, , нам не нужно переопределять bar(), потому что мы унаследовали только одну его реализацию.

Я пытался сделать это, но IDE подчеркивает, что я должен переопределить строку() функцию из класса, потому что D класс наследует несколько методов интерфейса из панели()

Update: Kotlin issue-tracker.

+0

Какой вопрос вы задаете? –

+0

@AndrewOrobator, ошибка в статье, или я делаю что-то неправильно? –

+0

Похоже, в этой статье есть ошибка. См. Мой ответ ниже –

ответ

0

Похоже, что в статье есть ошибка. Поскольку D наследует от A и B, интерфейсы, которые оба имеют метод bar(), должны быть определены обе реализации.

+0

Ни в коем случае. В методах Kotlin в интерфейсах поведение должно совпадать с методами по умолчанию в Java8. Нет никаких документов, в которых говорится иначе. Я думаю, что это ошибка компилятора, но кто-то скажет от команды Котлин. –

Смежные вопросы