내가 아는 언어는 재정의 된 메소드를 호출하지 않습니다. 실제로 일부 언어에서는 재정의 할 수없는 메서드 ( newC # 에서 키워드 사용)를 재정의 할 수 있습니다. 그러나 여기에는 두 가지 방법이 있습니다.
첫 번째는 클래스 외부에서 호출 할 수없는 재정의 가능한 메서드 (예 : C #, Java 또는 C ++) 를 호출하는 재정의 할 수없는 메서드 (예 : virtualC #에 키워드 가없는 키워드 또는 finalJava에 키워드 가있는 메서드)를 만드는 것입니다 protected.
class C
A
statement1
F
statement3
protected virtual F
statement2
과
class D inherits C
protected override F
statement4
C.F()
재정의 C하는 클래스 는 자유롭게 동작을 재정의 F하고 동작을 수정할 수 있지만 클래스 외부에서 온 호출자는 클래스를 통해서만 액세스 할 수 A있습니다.
편집 : 다른 사람들이 지적했듯이 이것을 템플릿 메소드 패턴 이라고합니다 .
두 번째 방법은 기본 클래스에 지정된 전제 조건과 사후 조건 (예 : Eiffel 또는 Code Contracts with C #)을 적용하는 언어를 사용하는 것입니다. 기본 클래스를 강제로 호출하지는 않지만 재정의 된 메소드가 동일한 명령문을 수행하도록 강제 할 수 있습니다. 언어를 사용하여 측면을 상속 할 수있는 경우 측면을 사용하면 도움이 될 수 있습니다.