2013-02-12 2 views
3

Если у меня есть 4 различных типов Java (назовем их A B C D) и A является подтипом B и A является подтипом C и B является подтипом D и C является подтипом D, это законно? Есть ли там примеры?Подтипы в Java

Рисование диаграммы:

  D 
      | | 
     |  | 
     B  C 
     |  | 
      | | 
      A 

Так D является супертипом. Спасибо!

+1

№. Java не поддерживает множественное наследование, поэтому 'A' не может быть подтипом как' B', так и 'C'. –

+2

Нет. Java поддерживает только одно наследование. И это хорошо. Правильная альтернатива - использовать «интерфейсы». – paulsm4

ответ

6

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

Однако вы можете сделать это, реализовав несколько интерфейсов, что отличается от множественного наследования.

Так что да, это возможно и для вас сделать это, пока вы можете проверить, является ли что-то экземпляром интерфейса, но это не то же самое, что тип класса, и ваша диаграмма будет немного отличаться от той, вы нарисовали.

+1

Вы правы: интерфейсы * являются * «другой вещью от множественного наследования». Если OP хочет, чтобы «A» был подтипом как «C», так и «B» одновременно, тогда ответ является определенным «Нет». – paulsm4

1

В java такая диаграмма произошла бы только в том случае, если D, C и B - все интерфейсы. Это законно и будет работать. Пример - любой класс, реализующий два интерфейса, например, Comparable. и Hashable. Объект является общим предком обоих этих интерфейсов (хотя и не прямым).

+1

B или C может быть классом (B реализует D, C расширяет D, A расширяет B реализует C) –

+1

@Andreas true. Еще на его диаграмме B и C выглядят симметрично, поэтому я не упоминал об этом случае. Однако ваш комментарий является адекватным и абсолютно правильным. –

0

Java не поддерживает множественное наследование.

А почему бы и нет? Вы можете посмотреть here. Наследовательская иерархия, которую вы показали, является типичной проблемой алмаза.

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