Eiffel
Eiffel の特徴の一つとして、継承における細かい指定が可能ということが挙げられる。例えば
というコードがあるとする(ioは標準入出力を扱うインスタンスで、ANYクラスのメンバである)。これは A というクラスを継承した B というクラスに同じ名前のメソッドがある場合である。このとき
というコードを実行したとき。b.method1 はおそらく B で定義されたメソッドが動くと誰もが期待するだろうが、a.method1 で実行されるメソッドは A と B どちらで定義されたものだろうか?この場合の処理は言語によって異なっており例えばC++の場合は A で定義されたメソッドが実行され、Javaの場合は B のメソッドが実行される。すなわち言語によって動作が違うため作成者の勘違いなどによって混乱を招くおそれがある。
Eiffelでは実のところ、どちらが実行されるか以前に上記のような例ではコンパイルすることができないことになっている。すなわち Eiffelのメソッドは全てデフォルトでは継承不可である。しかしこれでは、あまりに制約が強すぎるため、同名のメソッドを定義する必要性があるときは、継承クラスの作成者がどちらを実行するかを指定することが出来る。
具体的には rename と redefine という機能があり、上記の例では A で定義されたメソッドを実行したい場合は