Ответ 1
Это было конструктивное решение Java. Вы никогда не получите его, так что не беспокойтесь о нем слишком много. Хотя MI может помочь вам сделать Mixins, что единственный хороший MI когда-нибудь сделает вас.
Java не позволяет наследовать от нескольких классов (все же он позволяет наследовать от нескольких интерфейсов.), я знаю, что он очень близок к классической проблеме с алмазами. Но мои вопросы: почему Java не допускает множественное наследование, например, С++, когда нет двусмысленности (и, следовательно, нет шансов на проблему с алмазом), наследуя от нескольких базовых классов?
Это было конструктивное решение Java. Вы никогда не получите его, так что не беспокойтесь о нем слишком много. Хотя MI может помочь вам сделать Mixins, что единственный хороший MI когда-нибудь сделает вас.
Я читал, что большинство программистов не используют множественное наследование надлежащим образом. "Просто продолжайте и наследуйте класс, чтобы повторно использовать код" - это не лучшая практика в случае множественного наследования.
Многие программисты не знают, когда использовать простое наследование в большинстве случаев. Множественное наследование должно использоваться с осторожностью и только если вы знаете, что делаете, если хотите иметь хороший дизайн.
Я не думаю, что отсутствие множественного наследования в java (как в С++) будет помещать ограничения в ваше кодовое/прикладное проектирование/сопоставление проблемных областей в классы.
Простота. Чтобы процитировать Tom Sintes,
Команда разработчиков Java стремилась сделать Java:
- Простой, объектно-ориентированный и знакомый
- Надежный и безопасный
- Архитектура нейтральная и портативная.
- Высокая производительность
- Интерпретированный, поточный и динамический
Причины исключения множественного наследования с языка Java в основном вытекают из "простой, объектно-ориентированной и знакомой" цели. В виде простой язык, разработчики Java хотели, чтобы язык, который больше всего разработчики могли понять без обширной тренировки. С этой целью они работал над тем, чтобы сделать язык как можно более похожим на С++ (знакомым) без переноса С++ ненужной сложности (простой).
По мнению дизайнеров, множественное наследование вызывает больше проблем и путаница, чем она решает. Таким образом, они сокращают множественное наследование от (так же, как они сокращают перегрузку оператора). Конструкторы, обширный опыт на С++ научил их, что множественное наследование просто не стоило головной боли.
если java поддерживает множественное наследование, тогда это может повлиять на другие функции java
рассмотрим метод super(), который используется для вызова super class constructor.if. Программа имеет несколько суперклассов (из-за множественного наследования), тогда компилятор смущается о том, какой конструктор суперкласса следует вызывать и вызывать ошибку
Один простой ответ заключается в том, что все классы в Java получают из java.lang.Object IIRC. Итак, у вас всегда есть проблема с алмазом...:-D
Верно, что Java не использовалась для поддержки множественного наследования реализации (только для типа i.e. interface). Это было конструктивное решение.
Однако, поскольку Java 8 поддерживает множественное наследование с использованием методов по умолчанию. См. http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html:
Множественное наследование реализации - это способность наследовать определения методов из нескольких классов. Проблемы возникают с этим тип множественного наследования, например, конфликты имен и двусмысленность.... Методы по умолчанию вводят одну форму множественного наследования реализация.
Проблема с алмазом возникает, когда несколько родительских классов определяют свои собственные реализации чего-то, а дочерний класс этих двух имеет дело с двусмысленностью реализации. Итак, что, если все классы в Java получают от Object, это один родительский класс. "Одиночный родитель, несколько производных классов" - это не то же самое, что "Несколько родителей, один производный класс"