Dari https://dzone.com/articles/interface-default-methods-java
Java 8 memperkenalkan fitur baru “Metode Default” atau (Metode Pembela), yang memungkinkan pengembang untuk menambahkan metode baru ke antarmuka tanpa merusak implementasi yang ada dari antarmuka ini. Ini memberikan fleksibilitas untuk memungkinkan implementasi definisi antarmuka yang akan digunakan sebagai default dalam situasi di mana kelas konkret gagal menyediakan implementasi untuk metode itu.
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public class ClassAB implements A {
}
Ada satu pertanyaan umum yang orang tanyakan tentang metode default ketika mereka mendengar tentang fitur baru untuk pertama kalinya:
Bagaimana jika kelas mengimplementasikan dua antarmuka dan kedua antarmuka tersebut mendefinisikan metode default dengan tanda tangan yang sama?
Contoh untuk menggambarkan situasi ini:
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 {
}
Kode ini gagal untuk dikompilasi dengan hasil berikut:
java: class Clazz inherits unrelated defaults for foo() from types A and B
Untuk memperbaikinya, di Clazz, kita harus menyelesaikannya secara manual dengan mengganti metode yang bertentangan:
public class Clazz implements A, B {
public void foo(){}
}
Tetapi bagaimana jika kita ingin memanggil implementasi default metode foo () dari antarmuka A daripada mengimplementasikannya sendiri.
Dimungkinkan untuk merujuk ke A # foo () sebagai berikut:
public class Clazz implements A, B {
public void foo(){
A.super.foo();
}
}