При використанні стандартних методів Pascal-ю дуже важко або й зовсім неможливо створювати гнучкі процедури, які б працювали з формальними параметрами змінних типів, як це робить, наприклад, процедура writeln, що може виводити на екран дані типу string, real, integer, boolean і споріднені з ними.
Ця проблема вирішується об’єктно-орієнтованим програмуванням за допомогою механізму успадковування: якщо визначений породжений тип, то методи батьківського типу успадковуються, однак при бажанні вони можуть перевизначатися. Для перевизначення успадкованого типу просто описується новий метод з тим же іменем, що і успадкований метод, але з іншим тілом, а у випадку потреби – і з новою множиною параметрів.
Пояснимо цей процес на прикладі. Попередньо ми створили два об’єктні типи:
Type
TStudent=OBJECT
Name:String[30];
Date:String[10];
Rate:Real;
Procedure Init(Nm,Dt:String; Rt:Real);
Function GetName:String;
Function GetDate:String;
Function GetRate:Real;
Procedure ShowName;
Procedure ShowDate;
Procedure ShowRate;
END;
TStudent1=OBJECT(TStudent)
Bal:Real;
Procedure Init(Nm,Dt:String; Rt,Bl:Real);
Function GetBal:Real;
Function GetSum:Real;
Procedure ShowBal;
Procedure ShowAll;
END;
Дочірній тип успадковує від батьківського процедуру Init. Але, оскільки цей дочірній тип має додаткове поле даних Bal, яке батьківською процедурою Init не визначається, то цю процедуру необхідно перевизначити. Зробимо це так:
PROCEDURE TStudent1.Init(Nm,Dt:string;rt,bl:real);
Begin
TStudent.Init(Nm,Dt,Rt);
Bal:=bl;
End;
Зверніть увагу, що ми використовуємо метод ініціалізації об’єкту TStudent. Синтаксис виклику успадкованого методу такий:
Предок.Метод;
де Предок – ідентифікатор батьківського типу, а Метод – ідентифікатор методу цього типу.
Відзначимо також, що перевизначати можна тільки методи, але в жодному випадку не поля даних.