Bahkan jika itu bisa menjadi praktik buruk, saya akan mengatakan bahwa ada waktu yang akan memenuhi tujuannya.
.net
c#
object-oriented
Amir Rezaei
sumber
sumber
Jawaban:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c membahas pertanyaan ini dengan baik.
Pandangan saya adalah ini: Para desainer mungkin ingin membuat bahasa yang mempromosikan prinsip-prinsip desain yang baik. Ok, jadi ada saatnya beberapa pewarisan sempurna. Itu adalah pengecualian, bukan aturan, dan bisa disalahgunakan dengan mudah. Jadi, para perancang memutuskan untuk membuatnya mustahil dilakukan.
Untuk kasus-kasus di mana itu akan baik, Anda perlu menggunakan antarmuka. Itu bekerja, meskipun dengan kikuk; tetapi, Anda tidak akan membutuhkannya sebanyak itu.
sumber
Hanya untuk menggambarkan mengapa tidak, multiple inheritance didukung oleh C ++, tetapi sangat tidak disarankan karena Anda dapat menyelesaikan sebagian besar barang dengan komposisi yang Anda inginkan dengan MI, namun dengan cara yang jauh lebih bersih. Tidak seperti C ++, C # bukan bahasa OOP tipe "hybrid", artinya tidak berevolusi dari bahasa sebelumnya.
Jika Anda benar-benar membutuhkan banyak pewarisan, Anda dapat mengimplementasikan banyak antarmuka.
sumber
Walter Bright adalah pencipta D, yang tidak termasuk MI, dan satu-satunya orang yang pernah menulis seluruh kompiler C ++ sendirian. Menurutnya, alasan D kekurangan MI adalah bahwa terlalu sulit untuk membuat sistem MI yang secara bersamaan efisien, sederhana dan bermanfaat. Saya menduga Java dan C # menggunakan alasan yang sama. Bahasa seperti Perl dan Python tidak memiliki efisiensi sebagai tujuan utama, sehingga mereka memiliki sistem yang sederhana dan bermanfaat, tetapi sulit untuk diterapkan secara efisien. C ++ tampaknya tidak memiliki kesederhanaan sebagai tujuan, jadi itu menciptakan sistem yang sangat rumit yang hampir tidak ada yang mengerti.
Saya pikir Walter tepat sasaran. Jika ada bahasa yang memiliki sistem MI yang memenuhi ketiga kriteria ini dengan cukup baik, silakan tinggalkan komentar.
sumber
Warisan berganda, jika Anda sering menggunakannya, menghasilkan situasi yang sangat kompleks. Terlalu banyak kerumitan dengan sedikit manfaat adalah mengapa itu dikesampingkan untuk Java dan C #.
sumber
Karena perancang bahasa tampaknya ingin menghasilkan C ++ yang lebih baik, bukan bahasa yang lebih baik secara umum. (Seberapa sukses mereka dapat diperdebatkan.)
C ++ - style multiple inheritance memiliki beberapa masalah, sehingga orang-orang yang berasal dari C ++ umumnya menghilangkannya (Java, C #, D). Bahasa lain, Eiffel dan Common Lisp untuk nama dua, melakukannya secara berbeda dan tampaknya tidak memiliki masalah yang sama.
sumber