Pewarisan, metode virtual, override, reintroduce
Contoh pewarisan kelas
Object Pascal mendukung pewarisan dan metode virtual. Pada contoh berikut, TDog mewarisi dari TAnimal:
TDog adalah subkelas (kelas turunan), sedangkan TAnimal adalah induk kelas (kelas dasar)
program AnimalDemo;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
{$codepage utf8}
uses SysUtils;
type
// Kelas induk hewan
TAnimal = class
procedure Cry; virtual; // Metode virtual: suara hewan
end; // Akhir definisi kelas, cukup tulis end;
// Subkelas Anjing, mewarisi Animal dan ganti suara tangisan
TDog = class(TAnimal)
procedure Cry; override;
end;
procedure TAnimal.Cry;
begin
WriteLn('Hewan mengeluarkan suara');
end;
procedure TDog.Cry;
begin
WriteLn('Guk guk guk');
end;
var
Pet: TAnimal;
begin
// Instansi kelas induk
Pet := TAnimal.Create;
try
Pet.Cry;
finally
FreeAndNil(Pet);
end;
// Instansi subkelas disimpan di variabel kelas induk, polimorfisme aktif
Pet := TDog.Create;
try
Pet.Cry;
finally
FreeAndNil(Pet);
end;
end.Code language: JavaScript (javascript)
Hasil eksekusi
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
Linking mydemo.exe
45 lines compiled, 0.1 sec, 68544 bytes code, 4260 bytes data
D:\fpcdemo>mydemo
Hewan mengeluarkan suara
Guk guk gukCode language: CSS (css)
FreeAndNil
Pelepasan objek dengan aman, menggabungkan dua langkah jadi satu:
- Panggil fungsi
Freepada objek untuk menghapus memori; - Isi variabel dengan nilai
nilguna mencegah pointer menggantung.

Kode di atas menyimpan objek subkelas TDog ke dalam variabel Pet bertipe TAnimal. Saat memanggil Cry melalui Pet, yang dijalankan adalah prosedur Cry milik TDog bukan milik TAnimal, hal ini disebut polimorfisme.
Cry; virtualmenandai metode induk sebagai virtual dan mengaktifkan polimorfisme saat runtime;- Subkelas menimpa
Crydengan kata kuncioverride; - Variabel dideklarasikan sebagai
TAnimalnamun berisi objek asliTDog, sehingga suara gonggongan anjing akan berjalan otomatis.
Metode yang diberi tanda virtual: kompiler akan mencocokkan implementasi metode yang sesuai saat runtime berdasarkan tipe asli dari objek.
Jika Anda menghapus tulisan virtual dan override
Kedua pemanggilan akan menjalankan metode milik kelas induk

Gambar di atas menampilkan hasil setelah menghapus virtual dan override

Semua output berasal dari implementasi di dalam TAnimal
Kompiler hanya mengenali tipe deklarasi variabel TMyClass dan mengabaikan tipe asli objek saat program berjalan.
- Metode biasa secara bawaan bukan virtual, hanya akan menjadi virtual jika diberi penanda
virtual; - Untuk menimpa metode virtual warisan di subkelas wajib pakai
override, jika tidak kompiler akan mengeluarkan peringatan; - Gunakan
reintroducejika ingin menyembunyikan metode virtual nama sama dari kelas induk tanpa menimpanya (tidak disarankan karena membingungkan), setara dengan kata kunci new di C#