Gönderen https://dzone.com/articles/interface-default-methods-java
Java 8, geliştiricinin bu arabirimin mevcut uygulamasını bozmadan arabirimlere yeni yöntemler eklemesine izin veren "Varsayılan Yöntem" veya (Savunma yöntemleri) yeni özelliği sunar. Somut bir sınıfın o yöntem için bir uygulama sağlayamaması durumunda varsayılan olarak kullanılacak arayüz tanımlama uygulamasına izin vermek için esneklik sağlar.
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public class ClassAB implements A {
}
İnsanların yeni özelliği ilk kez duyduklarında varsayılan yöntemler hakkında sordukları ortak bir soru var:
Ya sınıf iki arabirim uygularsa ve bu arabirimlerin ikisi de aynı imzaya sahip varsayılan bir yöntemi tanımlarsa?
Bu durumu açıklamak için örnek:
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 {
}
Bu kod aşağıdaki sonuçla derlenemez:
java: class Clazz inherits unrelated defaults for foo() from types A and B
Bunu düzeltmek için, Clazz'da, çakışan yöntemi geçersiz kılarak manuel olarak çözmemiz gerekir:
public class Clazz implements A, B {
public void foo(){}
}
Ama ya kendi yöntemimizi uygulamak yerine A arabiriminden foo () yönteminin varsayılan uygulamasını çağırmak istersek ne olur?
A # foo () 'ya şu şekilde başvurmak mümkündür:
public class Clazz implements A, B {
public void foo(){
A.super.foo();
}
}