#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:
A
Класс должен быть отмеченopen
.- Суперкласс класса
A
B
должен быть инициализирован (т.е.A()
) 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()
}