Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
коллоквиум-ответы.docx
Скачиваний:
3
Добавлен:
10.09.2019
Размер:
62.08 Кб
Скачать

Перекрытие атрибутов в наследниках

В механизме наследования можно условно выделить три основных момента:

  • наследование полей;

  • наследование свойств;

  • наследование методов.

Наследование полей

1. Любой порожденный класс наследует от родительского все поля данных, поэтому классы Tpolygon и Tellipse автоматически содержат поля Fcolor и FVisible, объявленные в классе TFigure.

2. Доступ к полям предка осуществляется по имени, как если бы они были определены в потомке.

3. В потомках можно определять новые поля, но их имена должны отличаться от имен полей предка.

Наследование свойств и методов имеет свои особенности.

1. Свойство базового класса можно перекрыть (от англ. override) в производном классе, например чтобы добавить ему новый атрибут доступа или связать с другим полем или методом.

2. Метод базового класса тоже можно перекрыть в производном классе, например чтобы изменить логику его работы. Например, в классе Tellipse написать:

Procedure Draw; override;

Procedure Hide; override;

3. В наследнике можно вызвать перекрытый метод предка, указав перед именем метода зарезервированное слово inherited. Когда метод предка полностью совпадает с методом потомка по формату заголовка, то можно использовать более короткую запись. Например:

procedure Tellipse.Draw;

begin

inherited;

//свой код

end;

procedure Tellipse.Hide;

begin

inherited;

//Свой код

end;

4. В конструкторах сначала вызывается конструктор предка, а затем инициализируются дополнительные поля данных. В деструкторах применяется обратная последовательность действий: сначала разрушаются данные, недоступные предку, а затем вызывается унаследованный деструктор.

Совместимость объектов различных классов

Для классов, связанных отношением наследования, вводится новое правило совместимости типов. Вместо объекта базового класса можно подставить объект любого производного класса. Обратное неверно. Например, переменной типа TFigure можно присвоить значение переменной типа Tellipse:

var

Figure: TFigure;

...

Figure := TEllipse.Create;

Объектная переменная Figure формально имеет тип TFigure, а фактически связана с экземпляром класса TEllipse.

Правило совместимости классов чаще всего применяется при передаче объектов в параметрах процедур и функций. Например, если процедура работает с объектом класса TFigure, то вместо него можно передать объект класса TEllipse или TPolygon.

Заметим, что все объекты являются представителями известного вам класса TObject. Поэтому любой объект любого класса можно использовать как объект класса TObject.

13