Bildiğim hiçbir dil geçersiz kılınan yöntemi çağırmayı zorunlu kılar. Gerçekten de, bazı diller geçersiz kılınamayan yöntemlerin geçersiz kılınmasına ( new
C # anahtar sözcüğünü kullanmak gibi) izin verir . Ancak, buna yaklaşmanın iki yolu vardır.
İlk önce bir unoverridable yöntem oluşturmaktır (örneğin yoksun bir virtual
C # veya sahiptir birinde anahtar kelime final
Java anahtar kelime) (örneğin sınıfın dışından çağrılamaz geçersiz kılınabilir bir tek çağırması protected
C #, Java veya C ++) ile.
class C
A
statement1
F
statement3
protected virtual F
statement2
ve
class D inherits C
protected override F
statement4
C.F()
Sınıfları geçersiz kılma , davranışını C
geçersiz kılmak F
ve değiştirmek için ücretsizdir, ancak sınıfın dışındaki arayanlar yalnızca ona erişir A
.
Düzenleme: Diğerleri belirttiği gibi, buna Şablon yöntemi deseni denir .
İkinci yol, Eiffel veya Kod Sözleşmeleri ile C # gibi temel sınıfta belirtilen önkoşulları ve sonkoşulları uygulayan bir dil kullanmaktır. Taban sınıfı çağrılmaya zorlamaz, ancak geçersiz kılınan yöntem aynı ifadeleri uygulamak zorunda kalabilir. Kullanılması yönler dil yönleri devralınacak izin verirse de yardımcı olabilir.