Bisakah suatu antarmuka memperluas banyak antarmuka di Java? Kode ini tampak valid di IDE saya dan kompilasi:
interface Foo extends Runnable, Set, Comparator<String> { }
tetapi saya telah mendengar bahwa pewarisan berganda tidak diizinkan di Jawa. Mengapa tampaknya ada pengecualian untuk antarmuka?
java
inheritance
multiple-inheritance
extends
Prateek
sumber
sumber
Jawaban:
Ya kamu bisa melakukannya. Antarmuka dapat memperluas beberapa antarmuka, seperti yang ditunjukkan di sini:
Satu kelas juga dapat mengimplementasikan banyak antarmuka. Bagaimana jika dua antarmuka memiliki metode yang mendefinisikan nama dan tanda tangan yang sama?
Ada poin yang rumit:
Kemudian implementasi tunggal bekerja untuk keduanya :).
Baca lengkap posting saya di sini:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
sumber
void test()
dan antarmuka Bboolean test()
? (Apakah ini sepupu dari masalah intan ?) __Cobalah dan hal yang masuk akal terjadi: tidak diizinkan jika tipe pengembaliannya berbeda.Sebuah antarmuka dapat memperpanjang beberapa interface .
Sebuah kelas dapat mengimplementasikan banyak antarmuka .
Namun, suatu kelas hanya dapat memperpanjang satu kelas .
Hati-hati bagaimana Anda menggunakan kata-kata
extends
danimplements
ketika berbicara tentanginterface
danclass
.sumber
Jawabannya adalah: Ya.
Menurut JLS
sumber
Dari halaman dokumentasi Oracle tentang beberapa jenis warisan, kami dapat menemukan jawaban yang akurat di sini . Di sini kita harus terlebih dahulu mengetahui jenis multiple inheritance di java: -
Java "tidak mendukung multiple inheritance of state, tetapi mendukung multiple inheritance of implementation dengan metode default sejak Java 8 rilis dan multiple inheritance of type with interfaces.
Maka di sini muncul pertanyaan untuk "masalah berlian" dan bagaimana Java menangani hal itu: -
Dalam hal multiple inheritance implementasi java compiler memberikan kesalahan kompilasi dan meminta pengguna untuk memperbaikinya dengan menentukan nama antarmuka. Contoh di sini: -
Jadi di sini kita akan mendapatkan kesalahan sebagai: - antarmuka D mewarisi default yang tidak terkait untuk metode () dari tipe B dan C antarmuka D meluas B, C
Anda dapat memperbaikinya seperti: -
Dalam Kesimpulan kita dapat mengatakan bahwa java tidak mendukung multiple inheritance of state tetapi mendukung Java multiple inheritance of implementation dan multiple inheritance of type .
sumber
Anda dapat memperpanjang beberapa
Interfaces
tetapi Anda tidak dapat memperpanjang beberapaclasses
.Alasan bahwa tidak mungkin di Jawa untuk memperluas beberapa kelas, adalah pengalaman buruk dari C ++ di mana ini mungkin.
Alternatif untuk pewarisan multipe adalah kelas dapat mengimplementasikan banyak antarmuka (atau Antarmuka dapat memperpanjang beberapa Antarmuka)
sumber
Saya pikir kebingungan Anda terletak pada pewarisan berganda, di mana itu adalah praktik yang buruk untuk melakukannya dan di Jawa ini juga tidak mungkin. Namun, mengimplementasikan beberapa antarmuka diizinkan di Jawa dan juga aman.
sumber
misalnya, lihat di sini: http://www.tutorialspoint.com/java/java_interfaces.htm
sumber