Что составляет косвенное наследование? - PullRequest
2 голосов
/ 23 ноября 2011

Что мы имеем в виду, когда говорим "Все классы прямо или косвенно наследуют от класса Object"?Что представляет собой класс, косвенно наследующий методы, объявленные в его косвенном суперклассе?

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

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

Ответы [ 3 ]

10 голосов
/ 23 ноября 2011

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

С точки зрения конкретных методов, вы наследуете только тот, который был «последний переопределен» в иерархии. Поэтому, если я наследую от класса, который наследует toString(), я унаследую только переопределенную версию, а не оригинал от Object.

1 голос
/ 23 ноября 2011

На вопрос о косвенном наследовании класса уже был дан ответ.Поэтому я добавляю методы.

Я думаю, что здесь важно различие между интерфейсом класса (сигнатуры доступных методов, а не механизм интерфейсов Java) и поведением класса - реализациями доступных методов.В своем вопросе о методах вы можете сказать, что класс косвенно наследует методы независимо от того, были ли они переопределены промежуточными классами, и без каких-либо других деталей это означает наследование интерфейса.Чтобы установить контекст фразы в значение «поведение», необходимо явно указать, что реализация метода X взята из класса Y.

1 голос
/ 23 ноября 2011

Class1 косвенно наследует Class2, когда вы используете "is-a" более одного раза для описания их взаимосвязи (помните, что "is-a" взаимосвязь транзитивна).

Пример: a red-apple is-a apple is-a fruit is-a consumable.В этом примере red-apple косвенно наследуется от fruit и consumable.red-apple напрямую наследуется от apple (используется только один is-a переход)

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