6 июл. 2015 г.

Полиморфизм и наследование. Практика на понимание переопределения методов.

Если какой-либо из методов базового класса Java был перегружен несколько раз, переопределение имени этого метода в производном классе не скроет ни одну из базовых версий (в отличие от C++). Поэтому перегрузка работает вне зависимости от того, где был определен метод — на текущем уровне или в базовом классе. Чтобы все стало понятнее попрактикуемся на простом примере и уже классическом в этом блоге примере. Есть три класса А, В и С. В наследуется от А, а С наследуется от В. Посмотрим что с ними будет на этот раз…

SS004

SS005

Вывод у этой программы простой. Суть этой программы состоит в том, что переопределенные методы базовых классов не перестают существовать. То есть переопределенные методы базовых классов могут быть вызваны и использованы. По существу все методы здесь вызывались на объекте класса С, так как в этой программе у нас есть только один объект – это объект класса С. И суть в том, что этот объект содержит в себе все методы своих суперклассов, и они могут быть вызваны.

Так как в наследовании участвуют два класса, базовый и производный, не сразу понятно, какой же объект получится в результате. Внешне все выглядит так, словно новый класс имеет тот же интерфейс, что и базовый класс, плюс еще несколько дополнительных методов или же переопределенных методов, а так же полей. Однако наследование не просто копирует интерфейс базового класса. Когда вы создаете объект производного класса, внутри него содержится подобъект базового класса. Этот подобъект выглядит точно так же, как выглядел бы созданный обычным порядком объект базового класса. Поэтому извне представляется, будто бы в объекте производного класса «упакован» объект базового класса.

Как видно из данного примера у нас есть только объект класса С, но он содержит все поля и методы унаследованные от своих предков, классов А и В.

2 комментария:

  1. Админ, а есть ли у тебя в пдф или ворд формате все статьи ? Просто не всегда есть доступ к интернету

    ОтветитьУдалить