Как объяснить множественное наследование в Java

На самом деле вопрос задавал один из интервьюеров

Que:. Как вы можете сказать, что java не поддерживает множественное наследование? Если Класс объекта является родителем всех классов в java.

У меня нет ответа на этот вопрос.

Это означает отсутствие четкого представления о концепциях Java:-(

Пример: если A расширяет B

И здесь A уже расширяет класс Object. правильно? Теперь, как его работы?

Пожалуйста, поделитесь своими ответами.

Ответ 1

Множественное наследование - это множественное прямое наследование.

У одного класса класса не может быть двух непосредственных родительских классов. Тем не менее, у него может быть класс дедушки.

A extends B и B extends C, не совпадает с A extends both B and C.

Причина, по которой это запрещено, - это простота, когда у вас есть такой случай:

A extends both B and C

B extends D

C extends D

Если у вас был такой случай, и тогда у вас был этот код:

A a = new A();
a.someAbstractOrVirtualMethodOnD();

... вы говорите о реализации B реализации someAbstractOrVirtualMethodOnD() или реализации C того же метода? Которое нужно вызвать? (Подсказка: нет отличного ответа)

Итак, Java запрещает его.

Заметьте, вы можете получить что-то похожее на множественное наследование, если вы implement несколько интерфейсов. Но поскольку существует только одна конкретная реализация, нет никакой путаницы в отношении того, что называется.

Ответ 2

В верхней части всего, чтобы простой дизайн языка

И пример из blog Я регулярно слежу.

enter image description here

1) У нас есть два класса B и C, наследующие от A.

2) Предположим, что B и C переопределяют унаследованный метод и обеспечивают собственную реализацию.

3) Теперь D наследует как от B, так и от C выполнение множественного наследования. D должен наследовать этот переопределенный метод, который будет использоваться при переопределении метода? Будет ли это от B или C?

Здесь мы имеем двусмысленность.

Любые способы преодоления этого мы имеем интерфейсы и Многоуровневое наследование.

Изменить:

And here A is already extending Object class.

Это никогда не называется Multiple inheritance. Это называется Multi level inheritance.

На многоуровневом уровне

В классе inheritance участвуют многие классы, но один класс распространяется только на one. Самый низкий subclass может использовать все его содержимое super classes.

Ответ 3

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

Для примера класса Object, приведенного интервьюером, есть две возможности:

  • Сам интервьюер путается с несколькими родительскими классами (множественное наследование) и несколькими дочерними классами.

  • Или он пытается обмануть вас, используя этот вопрос

Родительский класс может иметь много дочерних классов и не относится к множественному наследованию.

Ответ 4

Посмотрите на этот ответ StackOverflow: fooobar.com/questions/202480/...

Ваш класс, который расширяет этот другой класс, но также расширяет Object, поэтому вы все еще находитесь в одной строке наследования, а не в двух.

Ответ 5

Множественное наследование - это то, где один класс может распространяться на несколько классов. Это невозможно в java. См. Здесь: http://en.wikipedia.org/wiki/Multiple_inheritance

Когда вы выполняете class A extends B в Java, тогда A распространяется только B, а не Object. B в свою очередь расширяет Object (или что-то еще, что в конечном итоге расширит объект)

Ответ 6

Единственное сходство множественного наследования в java - Interfaces. Класс может реализовывать несколько интерфейсов.

Object класс не является примером множественного наследования. Может быть, вы неверно истолковали вопрос.

Ответ 7

Это распространенное заблуждение с Java.

Способ множественного наследования (в С++ и Python) - это что-то вроде этого.

Parent1    Parent2    Parent3
   |          |          |
   _______________________
              |
              v
            Child

Это означает, что Child наследует атрибуты и методы от всех родителей.

Однако в Java наследование работает следующим образом.

  Object
    |
    v
  Child1
    |
    v
  Grandchild

Итак, объект - это суперкласс всех классов, но он не является непосредственным родителем всех классов. Однако Java предоставляет способ несколько реализовать множественное наследование путем Interfaces

Object
  |
  v
Child   <---  Interface
  |
  v
Grandchild

Теперь Grandchild наследует методы из Child, которые, в свою очередь, обязаны реализовать методы, определенные в интерфейсе [если это не абстрактный класс, но это отдельное обсуждение вообще]

Итак, Object является предком всех классов, но он не является родителем всех классов, а Java, поэтому не поддерживает множественное наследование.

Ответ 8

Ответ: Java поддерживает многоуровневое наследование, но не множественное наследование.

Ответ 9

Множественное наследование должно позволить классу наследовать несколько родительских классов. Но Java не позволяет этого, так как он может создать Проблема с алмазами

Относительно класса Object, являющегося родительским, а затем имеющего много классов в иерархии наследования, его называют Многоуровневое наследование

Sidenote:

С# позволяет множественное наследование по интерфейсу, позволяя потомку реализовать несколько родительских типов методы отдельно, даже если они имеют одну и ту же подпись

Ответ 10

Обратите внимание: http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

В случае класса Object для других классов его на самом деле не множественное наследование... Как сказано, его, где один класс может распространяться на несколько классов.

Ответ 11

Класс java может быть только прямым дочерним элементом одного родительского класса. У него может быть бабушка и дедушка, но нет второго родителя. Это похоже на наличие единственной биологической матери. У вас не может быть более двух биологических матерей, уверен, что у вас может быть бабушка.

Ответ 12

Пусть существует класс A и класс B. Теперь мы определяем класс Derived. Множественное наследование означает: класс Derived может наследовать как класс A, так и класс B. Но это невозможно в Java. Следовательно, он не поддерживает множественное наследование.

Ответ 13

Que: Как вы можете сказать, что java не поддерживает множественное наследование? Если класс Object является родителем всех классов в java.

Объект является предком всех классов (отец, дедушка, прадед и т.д.), но у каждого класса есть только один отец (если не указано, это класс Object).

Ответ 14

Первый случай: предположим, что вы создаете класс A без использования наследования. По умолчанию он получен из класса Object.

Второй случай: предположим, что вы создаете класс B, который расширяет класс A. Класс A содержит все поля класса Object, поэтому класс B также будет содержать их через наследование. это class B extends A(which extends Object), поэтому вы можете сказать, что B является подклассом для A, а также для Object.