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.
java
terminology
interfaces
inheritance
definition
RajeeV VenkaT
sumber
sumber
Jawaban:
UPDATE: Saya telah merevisi jawaban ini. Sejumlah poin bagus muncul dalam komentar yang pantas disebut.
Tidak sepenuhnya jelas apa yang Anda maksud dengan "mengikuti warisan". Mari kita ajukan pertanyaan yang sedikit berbeda?
Ini agak berbeda. Sangat disayangkan karena membingungkan.
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.
Ya, ada beberapa. Lihat spesifikasi Java bagian 8.4.8, yang saya kutip di sini untuk kenyamanan Anda.
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.)
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.
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".
sumber
java
jadi ini adalah jawaban yang benar, kecuali OP berarti beberapa lainnyajava
:-)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.
sumber
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.
sumber