Không có ngôn ngữ nào tôi biết về việc thực thi gọi phương thức ghi đè. Thật vậy, một số ngôn ngữ cho phép ghi đè các phương thức không thể ghi đè (chẳng hạn như sử dụng newtừ khóa trong C #). Tuy nhiên, có hai cách tiếp cận điều này.
Đầu tiên là tạo ra một phương thức không thể rút gọn (ví dụ: một phương thức thiếu virtualtừ khóa trong C # hoặc một phương thức có finaltừ khóa trong Java) gọi một phương thức có thể ghi đè không thể gọi được từ bên ngoài lớp (ví dụ: protectedtrong C #, Java hoặc C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
và
class D inherits C
protected override F
statement4
C.F()
Các lớp ghi đè Cđược tự do ghi đè Fvà sửa đổi hành vi của nó nhưng người gọi từ bên ngoài lớp chỉ truy cập thông qua A.
Chỉnh sửa: Như những người khác đã chỉ ra, đây được gọi là mẫu phương thức Mẫu .
Cách thứ hai là sử dụng một ngôn ngữ thực thi các điều kiện tiên quyết và hậu điều kiện được chỉ định trong lớp cơ sở, như Eiffel hoặc C # với Hợp đồng mã. Nó sẽ không buộc lớp cơ sở được gọi nhưng phương thức được ghi đè có thể bị buộc phải thực hiện các câu lệnh tương tự. Sử dụng các khía cạnh cũng có thể giúp nếu ngôn ngữ cho phép các khía cạnh được kế thừa.