Несмотря на то, что это в основном мнение, вы должны помнить одну вещь:
public class Child extends Parent implements MyInterface {
public static void main(String[] args) {
Child c = new Child();
c.logSomething("toLog");
}
}
Давайте проверим это для всех возможных сценариев: во-первых, такой метод существует в классе Parent, а не винтерфейс.
public class Parent {
public void logSomething(String toLog) {
System.out.println("Parent: " + toLog);
}
}
public interface MyInterface {
}
Очевидно, что результат будет:
Parent: toLog
Второй сценарий, код предоставляется интерфейсом,не класс.
public class Parent {
}
public interface MyInterface {
default void logSomething(String toLog) {
System.out.println("Interface: " + toLog);
}
}
Здесь это также будет работать, и результат будет:
Интерфейс: toLog
Но, когдаоба предоставляют:
public class Parent {
public void logSomething(String toLog) {
System.out.println("Parent: " + toLog);
}
}
public interface MyInterface {
default void logSomething(String toLog) {
System.out.println("Interface: " + toLog);
}
}
Результат будет:
Родитель: toLog
Вы на 100% уверены, что родительского класса нет,и никогда не будет одной (которая может обеспечить (или наследовать)) реализацию или сигнатуру этого метода?Тогда это свободный выбор.
С другой стороны, если вы выберете метод по умолчанию, и кто-то решит добавить родительский класс, это может привести к некоторой стрессовой отладке.