От MasterExam:
Какие операторы верны? (Выберите все, что применяется),
A
. - отношения всегда полагаются на наследование
B
. - отношения всегда полагаются на переменные экземпляра
C
. - отношения всегда требуют по крайней мере двух типов классов
D
. - отношения всегда полагаются на полиморфизм
E
. - отношения всегда сильно связываются
Корректные ответы: A, C, D
Я не вижу, как любой из A, C или D корректен.
Объектный объектный Объект ISA. Строковый объект Строка ISA. Существует только один тип класса в каждом из этих операторов и никакого наследования, или полиморфизм применяется.
Мое объяснение неправильно, или действительно ли ответы являются неправильными?
Ваше обоснование немного неверно, поскольку это отношение применяется к классам, а не к объектам.
Строка - это объект, поскольку String
наследуется от Object
. Аналогично FileOutputStream
IS-A OutputStream
IS-A Object
.
IS-A - это отношения между классами, но не между классами и объектами.
А. То, что Строка есть Строка, является ... тавтологией, считающейся очевидной. Но просмотрев документацию по API, вы обнаружите, что java.lang.String
также является java.lang.Object
. Фактически, все классы Java наследуются от java.lang.Object. Они наследуют основные свойства Object и добавляют некоторые другие собственные. Вот в чем суть отношений.
С. Опять же, тавтология о любом существе объекта представляет интерес для дзен-буддистов, но не для разработчиков языков и других компьютерных ученых. Итак, чтобы иметь отношение «есть-а», вам нужны два разных класса.
D. Я здесь не уверен. Если бы меня спросили, я бы сказал, что полиморфизм зависит от отношения «есть-а», а не наоборот.
«Отношение» относится к отношениям между двумя классами. Отношение is-a - это тип отношений, который использует наследование (в отличие, например, от has-a, которое использует композицию). Например, String - это объект. Класс не может наследовать от самого себя, что подразумевает C. В качестве примечания, у класса может быть композиция (has-a) с самим собой. Например. у Person может быть другое Person в качестве материнского поля.
Каждый раз, когда у вас есть наследование, экземпляр подкласса может использоваться как экземпляр суперкласса. Это полиморфизм, а значит, D тоже прав.
Вам нужно увидеть это немного по-другому:
Попробуйте увидеть это таким образом, теперь должно стать понятнее.
Я думаю, что пункты A и C уже достаточно ясны... что касается D. Хотя, технически возможно расширить класс без поведения или свойств экземпляра... (пустой или, возможно, только со статическими элементами) ... но это, в принципе, как бы разрушает цель "расширения" классов, поскольку вы хотите наследовать поведение/функциональность от классов выше по дереву наследования. Итак, я бы сказал, что вариант D. правильный (почти) :) (если мы не слишком углубляемся в технические вопросы).btw это может стать интересной дискуссией.
Извините, вы ошиблись. Они говорят о двух разных классах. Например, String - это объект.