1

I have an abstract class having an abstract method:

public abstract SomeClass Do(SomeClass o1, SomeClass o2);

Then when I implement in a concrete class which extends that abstract class which has the method from before it I get an error:

@Override 
public AClass Do(AClass o1, AClass o2) //AClass extends Someclass
{
//
}

Why do I get the error since AClass is a subtype of SomeClass?

The error is: The method ... must override or implement a super-type method

4

1 に答える 1

11

同じインターフェイスをサポートしていないため、エラーが発生します。次のような呼び出し元を想像してください。

AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());

それはうまくいくはずです-それはAbstractClass抽象メソッドを使用しているだけですよね? ただし、渡す値はAClass参照ではなく、単なるSomeClass参照です。

戻り値の型は問題ありませんが、宣言しているパラメーターは元の API よりも「狭い」ため、元のメソッドが処理できたすべての呼び出しをメソッドで処理できず、オーバーライドできません。

于 2014-01-29T00:21:08.323 に答える