Даже если это может быть плохой практикой, я бы сказал, что есть время, когда оно выполнит свое предназначение.
Даже если это может быть плохой практикой, я бы сказал, что есть время, когда оно выполнит свое предназначение.
Ответы:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c хорошо освещает этот вопрос.
Мое мнение таково: дизайнеры, вероятно, хотели создать язык, который бы продвигал хорошие принципы дизайна. Итак, бывают случаи, когда множественное наследование идеально. Это скорее исключение, чем правило, и им можно очень легко злоупотребить. Итак, дизайнеры решили сделать это невозможным.
Для тех случаев, когда это было бы хорошо, вам нужно использовать интерфейсы. Те работают, хотя неуклюже; но они вам не понадобятся для этого.
Просто чтобы проиллюстрировать, почему нет, множественное наследование поддерживается C ++, но настоятельно не рекомендуется, так как вы можете выполнить большинство вещей с помощью композиции, которую вы сделали бы с MI, но гораздо более чистым способом. В отличие от C ++, C # не является языком ООП «гибридного» типа, то есть он не эволюционировал по сравнению с предыдущим языком.
Если вам действительно нужно множественное наследование, вы можете реализовать несколько интерфейсов.
Уолтер Брайт является одновременно создателем D, в который не входит MI, и единственным человеком, который когда-либо сам писал весь C ++ компилятор. По его словам, причина, по которой D испытывает недостаток в MI, заключается в том, что слишком сложно создать систему MI, которая одновременно эффективна, проста и полезна. Я подозреваю, что Java и C # используют аналогичные рассуждения. Такие языки, как Perl и Python, не ставят своей главной целью эффективность, поэтому у них есть система, которая проста и полезна, но сложно реализовать эффективно. С ++, похоже, не ставит своей целью простоту, поэтому он создал чрезвычайно сложную систему, которую почти никто не понимает.
Я думаю, что Уолтер точно в цель. Если существует какой-либо язык с системой MI, которая удовлетворительно удовлетворяет всем трем критериям, оставьте комментарий.
Множественное наследование, если вы часто его используете, приводит к очень сложным ситуациям. Слишком большая сложность с небольшой выгодой - вот почему она была исключена как для Java, так и для C #.
Потому что разработчики языка явно хотели создать лучший C ++, а не лучший язык в целом. (Насколько успешными они были, можно обсудить.)
У множественного наследования в стиле C ++ есть некоторые проблемы, и поэтому люди, наследующие C ++, обычно его пропускают (Java, C #, D). Другие языки, Eiffel и Common Lisp, чтобы назвать два, делают это по-разному и, похоже, не имеют таких же проблем.