Множественное наследование в java

Java не позволяет наследовать от нескольких классов (все же он позволяет наследовать от нескольких интерфейсов.), я знаю, что он очень близок к классической проблеме с алмазами. Но мои вопросы: почему Java не допускает множественное наследование, например, С++, когда нет двусмысленности (и, следовательно, нет шансов на проблему с алмазом), наследуя от нескольких базовых классов?

Ответы

Ответ 2

Я читал, что большинство программистов не используют множественное наследование надлежащим образом. "Просто продолжайте и наследуйте класс, чтобы повторно использовать код" - это не лучшая практика в случае множественного наследования.

Многие программисты не знают, когда использовать простое наследование в большинстве случаев. Множественное наследование должно использоваться с осторожностью и только если вы знаете, что делаете, если хотите иметь хороший дизайн.

Я не думаю, что отсутствие множественного наследования в java (как в С++) будет помещать ограничения в ваше кодовое/прикладное проектирование/сопоставление проблемных областей в классы.

Ответ 3

Простота. Чтобы процитировать Tom Sintes,

Команда разработчиков Java стремилась сделать Java:

  • Простой, объектно-ориентированный и знакомый
  • Надежный и безопасный
  • Архитектура нейтральная и портативная.
  • Высокая производительность
  • Интерпретированный, поточный и динамический

Причины исключения множественного наследования с языка Java в основном вытекают из "простой, объектно-ориентированной и знакомой" цели. В виде простой язык, разработчики Java хотели, чтобы язык, который больше всего разработчики могли понять без обширной тренировки. С этой целью они работал над тем, чтобы сделать язык как можно более похожим на С++ (знакомым) без переноса С++ ненужной сложности (простой).

По мнению дизайнеров, множественное наследование вызывает больше проблем и путаница, чем она решает. Таким образом, они сокращают множественное наследование от (так же, как они сокращают перегрузку оператора). Конструкторы, обширный опыт на С++ научил их, что множественное наследование просто не стоило головной боли.

Ответ 4

если java поддерживает множественное наследование, тогда это может повлиять на другие функции java
рассмотрим метод super(), который используется для вызова super class constructor.if. Программа имеет несколько суперклассов (из-за множественного наследования), тогда компилятор смущается о том, какой конструктор суперкласса следует вызывать и вызывать ошибку

Ответ 5

Дизайнеры Java решили это сделать. Многократное наследование можно моделировать с помощью интерфейсов.

Ответ 6

Один простой ответ заключается в том, что все классы в Java получают из java.lang.Object IIRC. Итак, у вас всегда есть проблема с алмазом...:-D

Ответ 7

Верно, что Java не использовалась для поддержки множественного наследования реализации (только для типа i.e. interface). Это было конструктивное решение.

Однако, поскольку Java 8 поддерживает множественное наследование с использованием методов по умолчанию. См. http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html:

Множественное наследование реализации - это способность наследовать определения методов из нескольких классов. Проблемы возникают с этим тип множественного наследования, например, конфликты имен и двусмысленность.... Методы по умолчанию вводят одну форму множественного наследования реализация.

Ответ 8

Проблема с алмазом возникает, когда несколько родительских классов определяют свои собственные реализации чего-то, а дочерний класс этих двух имеет дело с двусмысленностью реализации. Итак, что, если все классы в Java получают от Object, это один родительский класс. "Одиночный родитель, несколько производных классов" - это не то же самое, что "Несколько родителей, один производный класс"