Jika kelas saya implements
sebuah antarmuka maka dapatkah saya mengatakan bahwa saya mengikuti warisan? Saya tahu bahwa ketika kelas kelas extends
lain maka itu warisan.
Jika kelas saya implements
sebuah antarmuka maka dapatkah saya mengatakan bahwa saya mengikuti warisan? Saya tahu bahwa ketika kelas kelas extends
lain maka itu warisan.
Jawaban:
UPDATE: Saya telah merevisi jawaban ini. Sejumlah poin bagus muncul dalam komentar yang pantas disebut.
Jika kelas saya mengimplementasikan antarmuka maka dapatkah saya mengatakan bahwa saya mengikuti warisan?
Tidak sepenuhnya jelas apa yang Anda maksud dengan "mengikuti warisan". Mari kita ajukan pertanyaan yang sedikit berbeda?
Apa itu warisan?
Ini agak berbeda. Sangat disayangkan karena membingungkan.
Kebingungan apa yang biasanya muncul dari perbedaan halus ini?
Kebingungan mungkin timbul karena orang menganggap warisan sebagai mekanisme untuk berbagi perincian implementasi. Meskipun ini adalah mekanisme yang demikian, mekanisme itu bekerja dengan cara berbagi anggota . Para anggota tidak perlu memiliki implementasi! Seperti yang akan kita lihat, mereka bisa abstrak.
Saya pribadi akan lebih bahagia jika spesifikasi Java dan C # menggunakan kata selain "inherit" untuk menggambarkan hubungan antara metode antarmuka dan kelas, untuk menghindari kebingungan ini. Tapi mereka tidak, dan kita harus berargumen dari spesifikasinya, bukan menentang mereka.
Di Jawa, apakah anggota antarmuka diwarisi oleh kelas yang mengimplementasikannya?
Ya, ada beberapa. Lihat spesifikasi Java bagian 8.4.8, yang saya kutip di sini untuk kenyamanan Anda.
Kelas C mewarisi dari superclass langsung dan superinterfaces langsung semua metode abstrak dan default m yang semua hal berikut ini benar: [...]
Jika Anda mengatakan bahwa suatu kelas mengimplementasikan antarmuka maka kelas mewarisi metode abstrak dan default dari antarmuka itu . (Tentu saja saya telah menghilangkan kondisi yang mengikuti; lihat spesifikasi untuk detail. Secara khusus, kelas yang mengimplementasikan anggota antarmuka tidak dianggap mewarisi anggota itu. Sekali lagi, apakah ini membingungkan? Ya.)
Apakah kita biasanya mengatakan dalam Java bahwa suatu kelas mewarisi dari suatu antarmuka?
Biasanya kita akan mengatakan bahwa sebuah kelas mengimplementasikan antarmuka. Seperti disebutkan di atas, suatu kelas dapat mewarisi anggota dari suatu antarmuka, namun masih belum dikatakan mewarisi dari antarmuka. Yang membingungkan, ya.
Apakah perbedaan halus ini penting dalam pekerjaan sehari-hari?
Biasanya tidak. Jenis parsing sempit dari spesifikasi ini lebih berguna bagi penulis kompiler daripada lini pengembang bisnis. Lebih penting untuk memahami kapan harus menggunakan antarmuka daripada untuk mendapatkan definisi yang tepat tentang "inherit from".
java
jadi ini adalah jawaban yang benar, kecuali OP berarti beberapa lainnya java
:-)
Warisan berarti menulis subkelas baru untuk superclass. Menulis kelas baru terhadap antarmuka sedang mengimplementasikan antarmuka itu. (Dan menulis antarmuka baru berdasarkan yang lama memperluas antarmuka itu.)
Satu-satunya istilah yang benar yang berlaku untuk ketiga kemungkinan adalah subtyping . Tidak setiap subtipe adalah subclass.
Dengan subkelas , Anda
Dengan antarmuka , Anda memenuhi kontrak dengan menerapkan metode yang dinyatakan.
Itu cara klasik untuk melihatnya. Sekarang dengan Java 8 antarmuka menjadi campuran:
Akankah mengimplementasikan antarmuka yang semua metodenya memiliki implementasi standar masih dianggap sebagai 'implement', atau lebih tepatnya sebagai ekstensi? Saya tidak tahu. Karena kasus ini agak dibuat-buat (ini sebenarnya mengaktifkan multi-inheritance tanpa kewarganegaraan), saya masih menggunakan 'pewarisan' hanya dengan subkelas.