Java поддерживает Mulitiple Inheritance? - PullRequest
1 голос
/ 14 марта 2011

Из того факта, что все классы в Java имеют родительский класс как Object. Но та же Java говорит, что она не поддерживает множественное наследование. Но что означает этот код?

public class A extends B
{
          //Blah blah blah
}

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

Так что теперь Java поддерживает Множественное наследование , если нет, то каков ответ на приведенный выше код (который показывает множественное наследование)

Ответы [ 5 ]

9 голосов
/ 14 марта 2011

Нет, это одиночное наследство. A наследует от B, B наследует от Object.

Множественное наследование будет A простирается от B и C, где B и C не наследуются друг от друга, что может вызвать Алмазную проблему :

Если B определяет метод foo(), а C также определяет метод foo(), и я делаю это:

new A().foo();

Какая реализация foo() будет использоваться?

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

2 голосов
/ 14 марта 2011

Множественное наследование имеет более одного прямого базового класса. В качестве примера вы привели одиночное наследование.

Например, если у вас есть 3 класса A, B и C ...

public class A extends B

с

public class B extends C

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

public class A extends B, C
1 голос
/ 14 марта 2011

Из того факта, что Java у всех классов в Java есть родительский класс как Object

На самом деле нет, это не правда. Object является только родительским классом по умолчанию . Если вы явно указываете родителя, как в вашем примере (A extends B), то определяемый вами класс больше не имеет Object в качестве непосредственного родителя.

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

1 голос
/ 14 марта 2011

Множественное наследование означает, что один класс расширяет два других класса. Многократное наследование разрешено, например, C ++. Но это не то же самое, что:

class Object {
...
}

class B extends Object { //default, not need to be there
...
}

class A extends B {
...
}
1 голос
/ 14 марта 2011

Java не поддерживает множественное наследование от разработчика.За кулисами компилятор гарантирует, что все расширяет Object.

По сути, компилятор изменяет

открытый класс A расширяет Object, B фактически превращается в класс A, расширяет B, а класс B расширяет Object.

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