Что происходит, если два интерфейса содержат один и тот же метод по умолчанию?
Если у меня есть два интерфейса с тем же методом по умолчанию, и оба реализуют с классом / см. Эту программу.
interface alpha {
default void reset() {
System.out.println("This is alpha version of default");
}
}
interface beta {
default void reset() {
System.out.println("This is beta version of default");
}
}
class MyClass implements alpha, beta {
void display() {
System.out.println("This is not default");
}
}
class main_class {
public static void main(String args[]) {
MyClass ob = new MyClass();
ob.reset();
ob.display();
}
}
тогда что будет? И также я получаю несвязанную ошибку с этой программой.
2 ответа
Решение
Вы не можете реализовать несколько интерфейсов, имеющих одинаковую сигнатуру методов Java 8 по умолчанию (без явной переопределения в дочернем классе)
, Вы можете решить это путем реализации метода, например,
class MyClass implements alpha, beta {
void display() {
System.out.println("This is not default");
}
@Override
public void reset() {
//in order to call alpha's reset
alpha.super.reset();
//if you want to call beta's reset
beta.super.reset();
}
}
По сути, эти два метода одинаковы в классе, который их реализует. Если вы попытаетесь реализовать два метода в Intellij, например, вы получите только один метод. Вы не можете объявить два, даже если вы хотите иметь разные подписи для них обоих.