Дещо видозмінимо попередньо створені об’єкти TStudent і TStudent1 (Програма 3.1)
program prakt1;
uses crt;
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 getname:string;
function getbal:real;
function getsum:real;
procedure showbal;
procedure showall;
end;
procedure TStudent.init(nm,dt:string;rt:real);
begin
name:=nm;
date:=dt;
rate:=rt;
end;
function TStudent.GetName:string;
begin
getname:=name;
end;
procedure TStudent.showname;
begin
writeln(getname);
end;
procedure TStudent1.init(nm,dt:string;rt,bl:real);
begin
TStudent.Init(nm,dt,rt);
bal:=bl;
end;
function TStudent1.GetName:string;
begin
getname:='~'+name+'~';
end;
(далі йде текст всіх раніше створених методів)
var st:TStudent;
st1:TStudent1;
begin
clrscr;
writeln('батьківський обєкт');
st.init('Ляшук','01.02.1995',700);
st.showname;
writeln('спадкоємець');
with st1 do begin
init('Panko','10.10.1995',550,4.8);
showname;
end;
writeln('=======================');
repeat until keypressed;
end.
Програма 3.1
Метод showname успадковується об’єктом TStudent1 від об’єкту TStudent. В свою чергу, цей метод використовує інший: getname, який ми для TStudent і TStudent1 створили трохи по-різному:
function TStudent.GetName:string;
begin
getname:=name;
end;
function TStudent1.GetName:string;
begin
getname:='~'+name+'~';
end;
Але який варіант методу getname виконається, якщо ми застосуємо метод showname до змінної об’єктного типу TStudent1: власний метод цього типу чи відповідний метод батьківського типу? Склавши відповідну програму і виконавши її, переконаємося, що буде виконуватися метод батьківського типу.

Якщо ж нам потрібно, щоб виконався метод дочірнього типу, доведеться або його перевизначати, або ж вдатися до віртуалізації.