Читайте также:
|
|
В механизме наследования можно условно выделить три основных момента:
наследование полей;
наследование свойств;
наследование методов.
Свойство базового класса можно перекрыть (override) в производном классе, например, чтобы добавить ему новый атрибут доступа или связать с другим полем или методом.
В наследнике можно вызвать перекрытый метод предка, указав перед именем метода зарезервированное слово inherited. Когда метод предка полностью совпадает с методом потомка по формату заголовка, то можно использовать более короткую запись.
Главные черты классов:
1) Классы инкапсулируют (т.е. включают в себя) поля, методы и свойства;
2) Способность наследовать поля, методы и свойства других классов.
При реализации класса TTextReader ничего не известно о том, как хранятся элементы в считываемых строках, поэтому метод ParseLine ничего не делает. Очевидно, что создавать объекты класса TTextReader не имеет смысла. Для чего тогда нужен классTTextReader?
Ответ: чтобы на его основе определить (породить) два других класса— TDelimitedReader и TFixedReader, предназначенных для чтения данных в конкретных форматах.
Класс TDelimitedReader является прямым потомком класса TTextReader. Если от TDelimitedReader породить новый класс, то он тоже будет потомком класса TTextReader, но уже не прямым.
Любой порожденный класс наследует от родительского все поля данных. Доступ к полям предка осуществляется по имени, как если бы они были определены в потомке. В потомках можно определять новые поля, но их имена должны отличаться от имен полей предка.
Наследование свойств и методов имеет свои особенности. Свойство базового класса можно перекрыть (от англ. override) в производном классе, например, чтобы добавить ему новый атрибут доступа или связать с другим полем или методом.
Метод базового класса тоже можно перекрыть в производном классе, например чтобы изменить логику его работы.
сonstructor TDelimitedReader.Create(const FileName: string; const ADelimiter: Char = ';');
begin
inherited Create(FileName);
FDelimiter:= ADelimiter;
end;
Как видно из примера, в наследнике можно вызвать перекрытый метод предка, указав перед
именем метода зарезервированное слово inherited. Когда метод предка полностью совпадает
с методом потомка по формату заголовка, то можно использовать более короткую запись.
Destructor TTextReader.Destroy;
begin
Active:= False;
inherited; // Эквивалентно: inherited Destroy;
end;
В конструкторах сначала вызывается конструктор предка, а затем инициализируются дополнительные поля данных. В деструкторах применяется обратная последовательность действий: сначала разрушаются данные, недоступные предку, а затем вызывается унаследованный деструктор.
Дата добавления: 2015-11-16; просмотров: 61 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Для классов, связанных наследованием, существует расширенная совместимость типов (совместимы по представлению в памяти). | | | Информация о типе времени выполнения программы |