Чем отличаются между собой метод по умолчанию, объявленный в интерфейсе с модификатором default и обычный метод, объявленный в обычном классе?
(update) Читаю
Метод по умолчанию представляет собой метод, который объявлен в интерфейсе с модификатором default; его тело всегда представлено блоком. Он предоставляет реализацию по умолчанию для любого класса, который реализует интерфейс без перекрытия метода. Методы по умолчанию отличны от конкретных методов, которые объявляются в классах.
Ответ
default метод не может обращаться к состоянию объекта (полям объекта), так как никакого объекта нет, но может вызвать другие методы и обращаться к статическим данным (константам).
default метод позволяет избежать необходимости изменить все классы, которые реализуют этот интерфейс.
В классе, реализующим интерфейс с default методами, вы можете их переопределить.
interface I1 {
// это public static final int i = 0;
// но в описании интерфейса public static final можно опустить
int i = 0;
default void m1() {
System.out.println("I1 m1 i = " + i);
m2();
}
void m2();
}
Без default этот класс бы не скомпилировался:
public class C1 implements I1 {
@Override
public void m2() {
System.out.println("C1 m2");
}
public static void main(String[] args) {
new C1().m1();
new C1().m2();
}
}
Вывод будет следующим:
I1 m1 i = 0
C1 m2
C1 m2
Комментариев нет:
Отправить комментарий