- •8. Система PascalAbc.Net
- •9. Принципы объектно-ориентированного программирования.
- •10. Указатели. Ссылочные переменные.
- •15. Переменная Self:
- •11. Понятие класса. Инициализаторы полей:
- •12. Видимость членов класса:
- •13. Конструктор. Деструктор.
- •14. Методы:
- •16. Свойства:
- •17. Наследование:
- •18. Переопределение методов:
- •19. Наследование конструкторов:
- •21. Виртуальные методы и полиморфизм:
- •20. Перегрузка операций:
- •22. Абстрактные методы:
18. Переопределение методов:
Метод базового класса может быть переопределен (замещен) в подклассах. Если при этом требуется вызвать метод базового класса, то используется служебное слово inherited.
type
<имя класса1>=class
<описание полей >
procedure <имя метода1>(<параметры>);
begin
<тело метода>
end;
end;
<имя класса2>=class(<имя класса1>)
<описание полей >
procedure <имя метода1>(<параметры>);
inherited <имя метода1>
begin
<тело метода>
end;
end;
Если метод в потомке имеет то же название, что и в базовом классе (с теми же параметрами) и не используя слово inherited, то метод в потомке замещается.
19. Наследование конструкторов:
В PascalABC.NET если класс не определяет конструкторов, то все конструкторы предка автоматически генерируются в потомке, вызывая соответствующие конструкторы предка (можно также говорить, что они наследуются). Если в классе определяются конструкторы, то конструкторы предка не генерируются. Конструктор по умолчанию, если он явно не определен, генерируется автоматически в любом случае и является protected. Если в PascalABC.NET конструктор предка вызывается из конструктора потомка, то этот вызов должен быть первым оператором. Если конструктор предка явно не вызывается из конструктора потомка, то неявно первым оператором в конструкторе потомка вызывается конструктор предка по умолчанию (т.е. без параметров). Если такого конструктора у предка нет (это может быть класс, откомпилированный другим .NET-компилятором или входящий в стандартную библиотеку классов - все классы, откомпилированные PascalABC.NET, имеют конструктор по умолчанию), то возникает ошибка компиляции.
21. Виртуальные методы и полиморфизм:
Полиморфизм - это свойство классов, связанных наследованием, иметь различную реализацию входящих в них методов, и способность переменной базового класса вызывать методы того класса, объект которого содержится в этой переменной в момент вызова метода.
Полиморфизм используется в ситуации, когда для группы взаимосвязанных объектов требуется выполнить единое действие, но каждый из этих объектов должен выполнить указанное действие по-своему (т.е. у действия возникает много форм). Для этого определяется базовый для всех объектов класс с виртуальными методами, предусмотренными для меняющегося поведения, после чего эти методы переопределяется в потомках. полиморфизм реализуется вызовом виртуальных функций через переменную базового класса.
Для того чтобы сделать метод виртуальным, следует в объявлении этого метода после заголовка указать ключевое слово virtual с последующей ; . Для переопределения виртуального метода следует использовать ключевое слово override
type
<имя класса1>=class
<описание полей >
procedure <имя метода1>;virtual;
begin
<тело метода>
end;
end;
<имя класса2>=class(<имя класса1>)
<описание полей >
procedure <имя метода1>;override;
begin
<тело метода>
end;
end;
Виртуальные методы связаны в виртуальную цепочку. Чтобы виртуальную цепочку разорвать используется слово reintroduce.
type
<имя класса3>=class(<имя класса2>)
<описание полей >
procedure <имя метода1>;virtual;reintroduce;
begin
<тело метода>
end;
end;
end;