ไม่มีภาษาที่ฉันรู้ว่ามีการบังคับให้เรียกวิธีการเขียนทับ แน่นอนว่าบางภาษาอนุญาตวิธีการแทนที่ที่ไม่สามารถเอาชนะได้ (เช่นการใช้newคำหลักใน C #) อย่างไรก็ตามมีสองวิธีในการเข้าใกล้สิ่งนี้
วิธีแรกคือสร้างเมธอด unoverridable (เช่นที่ไม่มีvirtualคีย์เวิร์ดใน C # หรืออันที่มีfinalคีย์เวิร์ดใน Java) ที่เรียกเมธอด overridable ที่ไม่สามารถเรียกได้จากนอกคลาส (เช่นprotectedใน C #, Java หรือ C ++)
class C
A
statement1
F
statement3
protected virtual F
statement2
และ
class D inherits C
protected override F
statement4
C.F()
การแทนที่คลาสCนั้นมีอิสระที่จะแทนที่Fและปรับเปลี่ยนพฤติกรรม แต่ผู้โทรจากภายนอกคลาสเข้าถึงได้Aเท่านั้น
แก้ไข: ในฐานะที่เป็นคนอื่น ๆ ได้ออกมาชี้นี้เรียกว่ารูปแบบวิธีการแม่แบบ
วิธีที่สองคือการใช้ภาษาที่บังคับใช้เงื่อนไขและ postconditions ที่ระบุไว้ในคลาสฐานเช่นไอเฟลหรือ C # กับสัญญารหัส มันจะไม่บังคับให้คลาสฐานที่จะเรียก แต่วิธีการแทนที่สามารถถูกบังคับให้ทำงบเดียวกัน การใช้แง่มุมอาจช่วยได้หากภาษายอมให้มีการสืบทอดมุมมอง