Rumah >Java >javaTutorial >Mengapa Java tidak menyokong pelbagai warisan?
Pertama sekali, fikirkan tentang senario ini Jika kelas A kini mewarisi kelas B dan kelas C, dan kaedah test() wujud dalam kedua-dua kelas B dan kelas C, maka apabila objek kelas A memanggil kaedah test(). , Bagaimana pula dengan memanggil test() kelas B? Atau bagaimana pula dengan ujian() kelas C? Tiada jawapan, jadi warisan berbilang tidak dibenarkan di Jawa.
Walau bagaimanapun, antara muka dalam Java boleh diwarisi berbilang, contohnya:
public interface A { void test(); } public interface B { void test(); } public interface C extends A, B{ }
Mengapa antara muka boleh diwarisi?
Oleh kerana A, B dan C adalah semua antara muka, walaupun kaedah ujian ditakrifkan dalam kedua-dua antara muka A dan B, kerana antara muka hanya mengisytiharkan kaedah , ia sebenarnya tidak dilaksanakan ., jadi ia bukan masalah untuk antara muka C, ia hanya mewarisi pengisytiharan kaedah ujian() yang sama apabila menggunakannya, kelas pelaksanaan antara muka C diperlukan. Hanya laksanakan kaedah ujian() ini.
public class C1 implements C{ public void test() { System.out.println("hello Hoeller"); } }
Jadi tidakkah terdapat kaedah lalai dalam antara muka? Tidak bolehkah kita juga melaksanakan kaedah dalam antara muka?
Mari mengujinya secara langsung:
public interface A { default void test() { System.out.println("a"); } } public interface B { default void test() { System.out.println("b"); } } public interface C extends A, B{ }
Pada masa ini, antara muka C akan menyusun dan melaporkan ralat Mesej ralat ialah:
com.hoeller. C mewarisi lalai yang tidak berkaitan untuk ujian () daripada jenis com.hoeller.A dan com.hoeller.B
Tidak kira sama ada ia diterjemahkan atau tidak, ralat dilaporkan, menunjukkan bahawa antara muka C tidak boleh mewarisi ujian kaedah lalai (dari kedua-dua antara muka pada masa yang sama. ).
Atas ialah kandungan terperinci Mengapa Java tidak menyokong pelbagai warisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!