2013-06-21 1 views
2

Если Java может расширять только один класс, и каждый класс расширяет java.lang.Object, как он может расширить другой класс? И почему каждый класс не написал extends Object?Как класс может расширять два класса в Java?

+1

Если вы не расширить класс * явно *, вы ** непосредственно ** наследовать объект ' 'класс. Если вы расширяете класс * явно *, вы наследуете все, что угодно от * суперкласса *, который уже расширяет 'Object' (напрямую или нет). – Maroun

+0

См. Http://stackoverflow.com/questions/5003285/java-multiple-inheritance – Raedwald

ответ

8

Если java может расширять только один класс, а каждый класс расширяет java.lang.Object, как он может расширять другой класс?

Когда вы говорите, что A расширяет B, это означает, что A продолжается B и B продолжается Object. Один класс может наследовать от другого, который может наследовать от другого, а в верхней части цепочки - java.lang.Object. Java не поддерживает множественное наследование, но поддерживает многоуровневое наследование.

Каким образом каждый класс не написал «extends Object»?

Все классы расширяют Object неявно, поэтому это будет избыточное кодирование.

1

Единственное, что вам разрешено продлить, также расширяет класс Object в конечном счете. Если вы не продлеваете дважды.

0

Множественное наследование не поддерживается в Java, вы можете наследовать только на прямой (так сказать). Вы используете интерфейсы, хотя IMO намного мощнее. Мне никогда не требовалось множественное наследование, но я сильно использую интерфейсы. В основном вместо создания второго класса вы определяете интерфейс, а затем пусть некоторый класс реализует его. Это может быть другой класс или тот же.

Все классы уже получены из объектов, вам не нужно писать это специально.

0

Каждое из следующих может расширить объект слева:
Object -> Автомобиль -> Автомобиль -> купе -> Кэмэро

Так, например, Coupe расширяет Car, и он не является (напрямую), продолжая Object ... это просто, что если вы продолжите движение вверх по цепочке, вы, в конце концов, достигнете Object.

Вы можете, однако, не имеют Coupe распространяются как Car и Truck

0

Вот пример, показывающий иерархию классов класса java.lang.Number Java.

http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

Как вы можете видеть, Integer класс наследует номер и номер наследуется от Object. Таким образом, вы можете наследовать несколько классов, связав их.

2

Поскольку java.lang.Object является родителем каждого объекта в Java, вы не должны явно писать extends Object

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

0

В объектно-ориентированном программировании (ООП) наследование описывает взаимосвязь между двумя типами или классами объектов, в которых одна называется подтип или ребенок другого.

A -> B -> C -> D 

Ребенок наследует функции родителя, что позволяет использовать общие функции. Например, можно создать переменный класс Animal с такими функциями, как еда и т. Д .; затем определите подтип Dog, который наследует эти функции, без необходимости их явно программировать, добавляя новые функции, такие как преследование кошек.

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

 A 
    /\ 
     C D 
     \/
     E 

Java использует первую модель и, следовательно, наследующий от объекта и другой класс не вызывает проблем, потому что это иерархический характер.

Object -> Animal -> Dog -> Pit Bull 

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

2

Каждый класс в Java расширяет неявно класс Object, и у вас есть только разрешение на расширение еще одного класса и бесконечное количество интерфейсов.

То же, что и один конструктор по умолчанию для каждого класса, если вы не создали конструктор.

Так что, когда вы говорите

class A{ 

} 

это на самом деле выглядит следующим образом:

class A extends Object{ 
    A(){ 
     super(); 
    } 
} 

Но когда вы говорите, когда вы говорите

class B extends A 

В этом случае класс B будет иметь функции класса A, а поскольку A расширяет Object, класс B также наследует класс Object.

A -> Object
B -> A
Так
B -> Объект