Навіть якщо це може бути погана практика, я б сказав, що є час, щоб він виконав своє призначення.
Навіть якщо це може бути погана практика, я б сказав, що є час, щоб він виконав своє призначення.
Відповіді:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c гарно висвітлює це питання.
Я вважаю, що це: дизайнери, ймовірно, хотіли скласти мову, яка сприяла б хорошим принципам дизайну. Гаразд, так бувають випадки, що багаторазове успадкування є ідеальним. Це швидше виняток, а не правило, і ними можна зловживати дуже легко. Отже, дизайнери вирішили зробити це неможливим.
У тих випадках, коли це було б добре, потрібно використовувати інтерфейси. Вони працюють, хоч і незграбно; але вони вам для цього не знадобляться.
Просто для пояснення того, чому ні, багатократне успадкування підтримується C ++, але сильно не рекомендується, оскільки ви можете виконати більшість речей зі складом, який ви б хотіли з MI, однак набагато чистіше. На відміну від C ++, C # не є мовою OOP "гібридного" типу, тобто вона не розвивалася з попередньої мови.
Якщо вам дійсно потрібно багатократне успадкування, ви можете реалізувати кілька інтерфейсів.
Уолтер Брайт є творцем D, який не включає MI, і єдиною людиною, яка коли-небудь написала весь компілятор C ++. За його словами, причиною D не вистачає ІМ є те, що створити систему ІМ, яка одночасно ефективна, проста і корисна, занадто важко. Я підозрюю, що Java та C # використовують подібні міркування. Такі мови, як Perl та Python, не мають ефективності як основної мети, тому у них є проста і корисна система, але її важко ефективно реалізувати. C ++, схоже, не має простоти як мети, тому він створив надзвичайно складну систему, яку майже ніхто не розуміє.
Я думаю, що Уолтер прямо в цілі. Якщо існує будь-яка мова з системою ІМ, яка розумно добре задовольняє всі ці три критерії, залиште коментар.
Багаторазове успадкування, якщо ви багато використовуєте, призводить до дуже складних ситуацій. Занадто велика складність і мала користь, тому це було виключено як для Java, так і для C #.
Тому що мовні дизайнери, очевидно, хотіли створити кращу C ++, а не кращу мову взагалі. (Наскільки вони успішні, можна обговорити.)
Багатократне успадкування стилю C ++ має деякі проблеми, і тому люди, що походять із C ++, зазвичай його опускають (Java, C #, D). Інші мови, Ейфелева та Common Lisp, щоб назвати дві, роблять це по-різному і, схоже, не мають однакових проблем.