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 new
kata kunci dalam C #). Namun, ada dua cara untuk mendekati ini.
Yang pertama adalah membuat metode yang tidak dapat diedit (mis. Yang tidak memiliki virtual
kata kunci dalam C # atau yang memiliki final
kata kunci di Jawa) yang memanggil metode yang tidak dapat dipanggil yang tidak dapat dipanggil dari luar kelas (misalnya protected
dalam 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 C
bebas untuk menimpa F
dan 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.