Tidak ada bahasa yang saya tahu tentang penegakan yang memanggil metode yang diganti. Memang, beberapa bahasa memungkinkan metode penggantian yang tidak dapat ditimpa (seperti menggunakan newkata kunci dalam C #). Namun, ada dua cara untuk mendekati ini.
Yang pertama adalah membuat metode yang tidak dapat diedit (mis. Yang tidak memiliki virtualkata kunci dalam C # atau yang memiliki finalkata kunci di Jawa) yang memanggil metode yang tidak dapat dipanggil yang tidak dapat dipanggil dari luar kelas (misalnya protecteddalam C #, Java atau C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
dan
class D inherits C
protected override F
statement4
C.F()
Kelas overriding Cbebas untuk menimpa Fdan memodifikasi perilakunya tetapi penelepon dari luar kelas hanya mengaksesnya A.
Sunting: Seperti yang telah ditunjukkan orang lain, ini disebut pola metode Templat .
Cara kedua adalah menggunakan bahasa yang memberlakukan prasyarat dan prasyarat yang ditentukan dalam kelas dasar, seperti Eiffel atau C # dengan Kontrak Kode. Itu tidak akan memaksa kelas dasar untuk dipanggil tetapi metode yang ditimpa dapat dipaksa untuk melakukan pernyataan yang sama. Menggunakan aspek juga dapat membantu jika bahasa memungkinkan aspek diwariskan.