Java 8 telah menambahkan metode default, yang dapat menambahkan fitur fungsional baru ke antarmuka tanpa mempengaruhi kelas implementasi antarmuka. Mari kita ilustrasikan ini dengan contoh di bawah ini.
Salinan kode adalah sebagai berikut:
MyClass kelas publik mengimplementasikan antarmuka {
public static void main (string [] args) {
}
@Mengesampingkan
public void mengatakansomething () {
// TODO Stub Metode yang dihasilkan otomatis
}
}
antarmuka antarmuka antarmuka {
public void mengatakansomething ();
}
Kode di atas menunjukkan bahwa kelas MyClass mengimplementasikan metode Saysomething () dari antarmuka antarmuka. Sekarang kami menambahkan metode Sayhi () baru ke antarmuka antarmuka. Jika ini dilakukan, kelas MyClass tidak dapat dikompilasi kecuali kami memberikan metode implementasi Sayhi ().
Metode default sangat berguna. Misalnya:
Salinan kode adalah sebagai berikut:
MyClass kelas publik mengimplementasikan antarmuka {
public static void main (string [] args) {
}
@Mengesampingkan
public void mengatakansomething () {
// TODO Stub Metode yang dihasilkan otomatis
}
}
antarmuka antarmuka antarmuka {
public void mengatakansomething ();
Default public void wayshi () {
System.out.println ("hai");
}
}
Perhatikan bahwa kami harus memberikan implementasi semua metode default. Oleh karena itu, metode default membuat kode kami lebih fleksibel dan juga dapat menulis metode untuk mengimplementasikannya di antarmuka. Metode yang diimplementasikan akan diimplementasikan sebagai metode default.
Jadi, apa yang harus saya lakukan jika ada konflik di berbagai antarmuka?
Karena kelas Java dapat menerapkan beberapa antarmuka, mungkin ada situasi di mana dua atau lebih antarmuka memiliki metode antarmuka default dengan nama yang sama, menyebabkan konflik. Karena mesin virtual Java sedang berjalan saat program berjalan, tidak jelas metode default mana yang ingin Anda gunakan. Ini akan menyebabkan kesalahan kompilasi.
Mari kita lihat contoh berikut.
Salinan kode adalah sebagai berikut:
MyClass kelas publik mengimplementasikan antarmuka, antarmuka {
public static void main (string [] args) {
Myclass mc = myclass baru ();
mc.sayhi ();
}
@Mengesampingkan
public void mengatakansomething () {
// TODO Stub Metode yang dihasilkan otomatis
}
}
antarmuka antarmuka antarmuka {
public void mengatakansomething ();
Default public void wayshi () {
System.out.println ("Hi dari Interfacea");
}
}
antarmuka antarmuka antarmuka {
Default public void wayshi () {
System.out.println ("Hi dari InterfaceB");
}
}
Itu tidak dapat melewati kompilasi dan akan melaporkan kesalahan berikut:
"Metode default duplikat bernama Sayhi dengan parameter () dan () diwarisi dari tipe antarmuka dan antarmuka."
Kecuali metode Sayhi () ditimpa di kelas MyClass:
Salinan kode adalah sebagai berikut:
MyClass kelas publik mengimplementasikan antarmuka, antarmuka {
public static void main (string [] args) {
Myclass mc = myclass baru ();
mc.sayhi ();
}
@Mengesampingkan
public void mengatakansomething () {
// TODO Stub Metode yang dihasilkan otomatis
}
@Mengesampingkan
public void sayshi () {
System.out.println ("Implementasi Sayhi () di MyClass");
}
}
antarmuka antarmuka antarmuka {
public void mengatakansomething ();
Default public void wayshi () {
System.out.println ("Hi dari Interfacea");
}
}
antarmuka antarmuka antarmuka {
Default public void wayshi () {
System.out.println ("Hi dari InterfaceB");
}
}
Jika Anda ingin menentukan metode antarmuka mana yang akan dihubungi, kami dapat melakukan ini:
Salinan kode adalah sebagai berikut:
MyClass kelas publik mengimplementasikan antarmuka, antarmuka {
public static void main (string [] args) {
Myclass mc = myclass baru ();
mc.sayhi ();
}
@Mengesampingkan
public void mengatakansomething () {
// TODO Stub Metode yang dihasilkan otomatis
}
@Mengesampingkan
public void sayshi () {
Interfacea.super.sayhi ();
}
}
antarmuka antarmuka antarmuka {
public void mengatakansomething ();
Default public void wayshi () {
System.out.println ("Hi dari Interfacea");
}
}
antarmuka antarmuka antarmuka {
Default public void wayshi () {
System.out.println ("Hi dari InterfaceB");
}
}
Apakah jawabannya sangat sederhana?