2014-01-08 3 views
-1

В документах Oracle четко указано, что язык Java не имеет функции множественного наследования. Любой класс, объявленный в Java, не может наследовать функции из двух отдельных классов. Но есть утверждение, что Class Object является суперклассом любого другого класса, созданного пользователем. Рассмотрим образец класса следующим образом:Аномальная функция Java, где отображается множественное наследование

Class Base { 
..... 
} 

Class Derived extends Base { 
..... 
} 

Теперь, если мы посмотрим на класс Derived то ясно видно, что он наследует от базового класса, а также от класса Object, то это доказывает, что Java делает имеет Множественное наследование.

Решения, как это предусмотрено в одном из страниц Oracle сайтов

Excepting Object, which has no superclass, 
every class has one and only one direct superclass (single inheritance). 
In the absence of any other explicit superclass, 
every class is implicitly a subclass of Object. 

Это означает, что любой класс, который не имеет ни одного-наследования доступно будет иметь только неявное одинарное наследование с классом объектом , не

См http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

+2

Это многоуровневое наследование не множественное наследование. –

+1

Нет моего друга ... Класс Derived напрямую не расширяет Object ... Родитель высшего уровня класса Derived расширяет Object. т. е. здесь Base расширяет объект. – TheLostMind

+0

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

ответ

2

Можно изменить код для

class Base extends Object{ 
..... 
} 

class Derived extends Base { 
..... 
} 

Так, так как только базы (а не производный) расширяет объект, класс Derived наследует объект через Base, не кратно Наследование существует таким образом.

+0

Спасибо за хороший ответ – Nandhan

0

Если один class имеет (extends) более одного родителя class, мы назвали его multiple inheritance. В Java никогда не было этого, в этом случае только multi level inheritance не multiple inheritance.

0

Это случай Multi-Level Наследование не множественного наследования.

Несколько наследований: мы можем наследовать более одного класса в одном классе.

enter image description here

Multi-Level Наследование: где один класс может наследовать только одна базовая класс и производный класс может стать базовым классом некоторого другого класса

enter image description here

+0

Пожалуйста, найдите решение в разделе вопросов – Nandhan

0

В Java вы не можете распространяться на 2 отдельные иерархии классов. Однако вы можете иметь несколько классов в иерархии. Одно определение класса может иметь только одно «расширение» в нем.

Например, Mammal extends Animal и Dog extends Mammal приемлемо. Собака получит поведение и состояния млекопитающих и животных (через млекопитающих).

Что нельзя, это один класс, расширяющий несколько классов.

Итак, в вашем примере, если у вас есть 2 базовых класса BaseA и BaseB, класс Derived не может одновременно расширять BaseA и BaseB.

+0

. Решение проблемы находится в разделе вопросов – Nandhan

0

Я думаю, что вы неправильно понимаете наследование.

Multiple inheritance позволяет классу наследовать свойства двух разных классов. Материал из Википедии, здесь является иллюстрацией одной такой иерархии (известный как «проблема алмаза»):

enter image description here

Примите к сведению: D наследует от обоих B и C.

Чтобы довести его до лучше иллюстрации, множественное наследование позволит вам иметь классовую структуру, как это:

public class Bike { 
    // properties of a bike 
} 

public class Car { 
    // properties of a car, namely that it has a motor 
} 

public class Moped extends Bike, Car { 
    // properties inherited combine that it is both a Bike and a Car 
} 

в настоящее время так, что классы Java подключены в настоящее время является то, что их наследование hierarchal; то есть один класс может иметь только один родительский класс.

Хорошим способом думать о наследовании таким образом является проверка отношения «is-a».

Для примера:

  • DerivedявляетсяBase.
  • A BaseявляетсяObject.
  • A DerivedявляетсяObject.
+0

. Решение проблемы можно найти в разделе вопросов – Nandhan

Смежные вопросы