Чем отличаются между собой метод по умолчанию
, объявленный в интерфейсе с модификатором 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
Одно из различий заключается в том, что все методы (в т.ч. и default
) в интерфейсе неявно объявлены как public
и поменять этот модификатор доступа не получится, а в обычном методе в классе Вы можете сами устанавливать различные модификаторы доступа.
UPD:
Метод по умолчанию представляет собой метод, который объявлен в интерфейсе с модификатором default; его тело всегда представлено блоком. Он предоставляет реализацию по умолчанию для любого класса, который реализует интерфейс без перекрытия метода. Методы по умолчанию отличны от конкретных методов, которые объявляются в классах.
Вы несколько неправильно поняли это предложение. Здесь имелось ввиду то, что если класс реализует интерфейс, который содержит default
-метод, то при переопределении в классе этого метода, метод из класса перекроет default
-реализацию.
Попробуйте сделать акцент на выделенном тексте, тогда поймете о чем я:
Он предоставляет реализацию по умолчанию для любого класса, который реализует интерфейс без перекрытия метода. Методы по умолчанию отличны от конкретных методов, которые объявляются в классах.
К тому же, если бы здесь имелись ввиду какие-то принципиальные различия, то они здесь же были бы указаны, так как в этом пункте из главы про интерфейсы рассказывается непосредственно про default
-методы.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Полазив в anroid studio я нашел файлы векторной графики в (данном случаи это были иконки, в форматеxml)
я тут начал писать программу в javafx и у меня скопилось много вопросов по поводу координат в инете я нечего не нашел
Здравствуйте! Впервые практикуюсь в REST и Spring