Kotlin / Java — реализация интерфейса наследование

#java #kotlin #inheritance #interface

#java #kotlin #наследование #интерфейс

Вопрос:

У меня есть следующие классы и интерфейс:

 class A() {
    fun one() {...}
    fun two() {...}
}

class B(): A, C {
    fun tree() {...}
}

interface C {
    fun one()
    fun two()
    fun tree()
}
  

Как вы можете, класс B расширяет A, а также реализует интерфейс C.
Проблема в том, что в классе Kotlin B, который является фактическим разработчиком C, не имеет 2 первых функций и, следовательно, не реализует правильные функции для интерфейса.
Есть ли правильный способ сделать это?

Комментарии:

1. Чего именно вы ожидаете? Реализации класса A one и two удовлетворяют контракту интерфейса. Если вы хотите переопределить их, вам нужно пометить функции open в классе A. И, конечно, сам класс A должен быть помечен как открытый для компиляции приведенного выше кода.

2. @Tenfour04 я не хочу их переопределять, я хочу, чтобы они удовлетворяли интерфейсу, но это не так. Я получаю Class 'B' is not abstract and does not implement abstract member public abstract fun one()

Ответ №1:

  1. A Класс должен быть отмечен open .
  2. Суперкласс класса A B должен быть инициализирован (т.е. A() )
  3. B.tree() Метод требует override модификатора

Помимо этого, он должен работать…

 open class A {
    fun one() {}
    fun two() {}
}

class B: A(), C {
    override fun tree() {}
}

interface C {
    fun one()
    fun two()
    fun tree()
}