Вопрос

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

Это было полезно?

Решение

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

Другие советы

Я читал, что большинство программистов не используют множественное наследование должным образом.«Просто наследовать от класса только для повторного использования кода» — не лучшая практика в случае множественного наследования.

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

Я не думаю, что отсутствие множественного наследования в Java (как в C++) наложит ограничения на ваш код/дизайн приложения/отображение проблемной области в классы.

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

Простота.Процитировать Том Синтес,

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

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

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

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

Так решили разработчики Java.Множественное наследование можно моделировать с помощью интерфейсов.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top