Java беспорядок вопроса об экзамене отношений ISA

От MasterExam:

Какие операторы верны? (Выберите все, что применяется),

A. - отношения всегда полагаются на наследование
B. - отношения всегда полагаются на переменные экземпляра
C. - отношения всегда требуют по крайней мере двух типов классов
D. - отношения всегда полагаются на полиморфизм
E. - отношения всегда сильно связываются

Корректные ответы: A, C, D

Я не вижу, как любой из A, C или D корректен.

Объектный объектный Объект ISA. Строковый объект Строка ISA. Существует только один тип класса в каждом из этих операторов и никакого наследования, или полиморфизм применяется.

Мое объяснение неправильно, или действительно ли ответы являются неправильными?

5
задан Martijn Courteaux 13 July 2010 в 18:18
поделиться

6 ответов

Ваше обоснование немного неверно, поскольку это отношение применяется к классам, а не к объектам.

Строка - это объект, поскольку String наследуется от Object. Аналогично FileOutputStream IS-A OutputStream IS-A Object.

IS-A - это отношения между классами, но не между классами и объектами.

1
ответ дан 13 December 2019 в 22:01
поделиться

А. То, что Строка есть Строка, является ... тавтологией, считающейся очевидной. Но просмотрев документацию по API, вы обнаружите, что java.lang.String также является java.lang.Object . Фактически, все классы Java наследуются от java.lang.Object. Они наследуют основные свойства Object и добавляют некоторые другие собственные. Вот в чем суть отношений.

С. Опять же, тавтология о любом существе объекта представляет интерес для дзен-буддистов, но не для разработчиков языков и других компьютерных ученых. Итак, чтобы иметь отношение «есть-а», вам нужны два разных класса.

D. Я здесь не уверен. Если бы меня спросили, я бы сказал, что полиморфизм зависит от отношения «есть-а», а не наоборот.

3
ответ дан 13 December 2019 в 22:01
поделиться

«Отношение» относится к отношениям между двумя классами. Отношение is-a - это тип отношений, который использует наследование (в отличие, например, от has-a, которое использует композицию). Например, String - это объект. Класс не может наследовать от самого себя, что подразумевает C. В качестве примечания, у класса может быть композиция (has-a) с самим собой. Например. у Person может быть другое Person в качестве материнского поля.

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

4
ответ дан 13 December 2019 в 22:01
поделиться

Вам нужно увидеть это немного по-другому:

  • A cat is-a animal
  • A car has-a engine
  • A String is-a object
  • A String has-a char array

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

1
ответ дан 13 December 2019 в 22:01
поделиться

Я думаю, что пункты A и C уже достаточно ясны... что касается D. Хотя, технически возможно расширить класс без поведения или свойств экземпляра... (пустой или, возможно, только со статическими элементами) ... но это, в принципе, как бы разрушает цель "расширения" классов, поскольку вы хотите наследовать поведение/функциональность от классов выше по дереву наследования. Итак, я бы сказал, что вариант D. правильный (почти) :) (если мы не слишком углубляемся в технические вопросы).btw это может стать интересной дискуссией.

1
ответ дан 13 December 2019 в 22:01
поделиться

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

0
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: