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 new
từ 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 virtual
từ khóa trong C # hoặc một phương thức có final
từ 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ụ: protected
trong 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 đè F
và 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.