Java に抽象クラスがある状況を考えてみましょう。
public abstract class Foo
{
public abstract int myOperation();
}
現在、そのサブクラスのいくつかは、このように myOperation をオーバーライドできます。
class A extends Foo
{
public int myOperation()
{
// Do stuff
}
}
しかし、あるサブクラスが代わりに次のような他のデータ型を返したい場合。
class A extends Foo
{
public Object myOperation()
{
// Do stuff
}
}
クライアントが呼び出すメソッドを必ずしも選択しないように、デザインをそのまま維持するために、メソッド名を同じにする必要があります。空の実装である別のメソッドを持つか、オブジェクトを戻り値の型として使用する以外に、これに対する回避策はありますか? それとも、これは OO 設計の非常に悪い例ですか?
C++ の Covariant 戻り値の型について聞いたことがありますが、Java にはこれに対する他のメカニズムがあるかどうか疑問に思っています。
ここでインターフェイスを自由に使用することもできます。