Абстрактные классы в программировании


Абстрактные классы в программированииКласс может быть использован двояко: как образец (шаблон) для построения объектов, либо как основа для построения другого класса.
Отношение Класс-Объект: (каждый) объект содержит все нестатические поля класса и может использовать все методы класса (статические и нестатические). Нестатическим методам неявно передается дополнительный параметр - ссылка на объект. Эта ссылка обозначается словом this. Статическим методам такой параметр не передается.

Отношение наследования: класс В является "наследником" класса А (соответственно, класс А является "предком" класса В). В программе отношение наследует задается словом extends.

Класс — наследник базового класса называют подклассом этого класса, или производным классом, а базовый класс по отношению к наследнику называют суперклассом или над классом. У каждого класса может быть только один непосредственный суперкласс. Каждый класс может иметь произвольное число подклассов.

Отношение наследования задает иерархию классов. Графически иерархия представляется деревом. В Java корнем дерева является класс Object. Класс, который объявляется как независимый (class С{...}), фактически является наследником класса Object.

При необходимости можно запретить использование некоторого класса в качестве базового, если в его определении указать атрибут final: final class А{...}; class B-extends А{-..)

Наследуемые поля

Подкласс (класс-наследник) содержит все поля своего суперкласса. Например, class A{int a;}; class В extends A{int b;} - в классе В имеются два поля типа int: а и b, причем поле а унаследовано от базового класса.

Наследуемые и переопределяемые методы

Подкласс может пользоваться всеми методами (с некоторыми ограничениями, связанными с защитой) суперкласса. Подкласс может переопределять методы суперкласса, т.е. обозначать именем, примененным в суперклассе, совершенно другую функциональность.

Например, class A{int a; int getA( ){retum a;}; void setA( ){a=l v class В extends A{int b;void setB( ){b=getA();}; void setA( ){a=2;};}

В этом примере класс В переопределил метод setA().

Особенность наследования: конструкторы не наследуются! Поэтому при необходимости вызова конструктора суперкласса в конструкторе подкласса этот вызов должен быть первым оператором конструктора и иметь вид super(...).


Только материалы из рубрики ТИЦ свободны для копирования без каких-либо условий. Ссылка на остальные материалы обязательна.