Ngay cả khi đó có thể là những thực tiễn xấu, tôi sẽ nói rằng có thời gian nó sẽ hoàn thành mục đích của nó.
Ngay cả khi đó có thể là những thực tiễn xấu, tôi sẽ nói rằng có thời gian nó sẽ hoàn thành mục đích của nó.
Câu trả lời:
/programming/995255/why-is-multipl-inherribution-not-allowed-in-java-or-c bao gồm câu hỏi này độc đáo.
Tôi coi đó là điều này: Các nhà thiết kế có thể muốn tạo ra một ngôn ngữ thúc đẩy các nguyên tắc thiết kế tốt. Ok, vì vậy có nhiều thời điểm mà nhiều kế thừa là hoàn hảo. Tuy nhiên, đó là những ngoại lệ, thay vì quy tắc và có thể bị lạm dụng rất dễ dàng. Vì vậy, các nhà thiết kế quyết định làm cho nó không thể làm được.
Đối với những trường hợp sẽ tốt, bạn cần sử dụng giao diện. Những công việc đó, mặc dù vụng về; nhưng, bạn sẽ không cần chúng cho điều đó nhiều.
Chỉ để minh họa tại sao không, nhiều kế thừa được C ++ hỗ trợ, nhưng không được khuyến khích mạnh mẽ vì bạn có thể hoàn thành hầu hết mọi thứ với bố cục mà bạn sẽ làm với MI, tuy nhiên theo cách sạch sẽ hơn nhiều. Không giống như C ++, C # không phải là ngôn ngữ OOP "lai", tức là nó không phát triển từ ngôn ngữ trước.
Nếu bạn thực sự cần nhiều kế thừa, bạn có thể thực hiện nhiều giao diện.
Walter Bright vừa là người tạo ra D, không bao gồm MI, và là người duy nhất tự mình viết toàn bộ trình biên dịch C ++. Theo ông, lý do D thiếu MI là vì quá khó để tạo ra một hệ thống MI đồng thời hiệu quả, đơn giản và hữu ích. Tôi nghi ngờ Java và C # sử dụng lý do tương tự. Các ngôn ngữ như Perl và Python không có hiệu quả là mục tiêu chính, vì vậy chúng có một hệ thống đơn giản và hữu ích, nhưng khó thực hiện hiệu quả. C ++ dường như không có sự đơn giản như một mục tiêu, vì vậy nó đã tạo ra một hệ thống phức tạp ồ ạt mà hầu như không ai hiểu được.
Tôi nghĩ Walter là đúng mục tiêu. Nếu có bất kỳ ngôn ngữ nào có hệ thống MI thỏa mãn cả ba tiêu chí này một cách hợp lý, vui lòng để lại nhận xét.
Nhiều kế thừa, nếu bạn sử dụng nó nhiều, dẫn đến các tình huống rất phức tạp. Quá nhiều phức tạp với ít lợi ích là lý do tại sao nó bị loại trừ cho cả Java và C #.
Bởi vì các nhà thiết kế ngôn ngữ dường như muốn tạo ra một C ++ tốt hơn, nói chung không phải là một ngôn ngữ tốt hơn. (Làm thế nào thành công họ có thể được tranh luận.)
Đa kế thừa kiểu C ++ có một số vấn đề và do đó mọi người xuất phát từ C ++ thường bỏ qua nó (Java, C #, D). Các ngôn ngữ khác, Eiffel và Common Lisp để đặt tên cho hai, làm điều đó khác đi và dường như không có cùng một vấn đề.