Java 8 wprowadza nową metodę "Metody domyślnej" lub (metody Defender), która umożliwia programistom dodawanie nowych metod do interfejsów bez przerywania dotychczasowej implementacji tych interfejsów. Zapewnia elastyczność pozwalającą implementować definicję interfejsu, która będzie używana jako domyślna w sytuacji, gdy konkretna klasa nie zapewni implementacji dla tej metody.
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public class ClassAB implements A {
}
Jest jeden wspólny pytanie, które ludzie pytają o metodach domyślnych, gdy słyszą o nowej funkcji po raz pierwszy:
Co jeśli klasa implementuje dwa interfejsy i oba te interfejsy zdefiniowania domyślnego metoda z tym samym podpisem?
przykład ilustrujący tę sytuację:
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public interface B {
default void foo(){
System.out.println("Calling B.foo()");
}
}
public class ClassAB implements A, B {
}
Ten kod nie skompilować z następującym wynikiem:
java: class Clazz inherits unrelated defaults for foo() from types A and B
to naprawić, w Clazz, musimy go rozwiązać ręcznie przez przesłanianie sprzecznej metody:
public class Clazz implements A, B {
public void foo(){}
}
Ale co jeśli chcielibyśmy nazwać domyślną implementację metody foo() z interfejsu A zamiast implementacji własnej.
Jest to możliwe w odniesieniu do A # foo() w następujący sposób:
public class Clazz implements A, B {
public void foo(){
A.super.foo();
}
}
zobaczyć ten post o domyślny http://zeroturnaround.com/rebellabs/java-8-explained-default-methods/ #!/ – emeraldjava
Powiązany post https://stackoverflow.com/questions/31578427/what-is-the- purpose-of-the-default-keyword-in-java – Ravi