ไม่มีภาษาที่ฉันรู้ว่ามีการบังคับให้เรียกวิธีการเขียนทับ แน่นอนว่าบางภาษาอนุญาตวิธีการแทนที่ที่ไม่สามารถเอาชนะได้ (เช่นการใช้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 # กับสัญญารหัส มันจะไม่บังคับให้คลาสฐานที่จะเรียก แต่วิธีการแทนที่สามารถถูกบังคับให้ทำงบเดียวกัน การใช้แง่มุมอาจช่วยได้หากภาษายอมให้มีการสืบทอดมุมมอง