1

我有一个具有抽象方法的抽象类:

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

然后,当我在一个扩展该抽象类的具体类中实现时,该抽象类具有之前的方法,我得到一个错误:

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

为什么我会收到错误,因为 AClass 是 SomeClass 的子类型?

错误是:方法...必须重写或实现超类型方法

4

1 回答 1

11

你得到一个错误,因为它不支持相同的接口。想象一个这样的调用者:

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

应该可行-它只是使用AbstractClass抽象方法,对吗?但是您传入的值不是AClass引用,它们只是SomeClass引用。

您的返回类型没问题,但您声明的参数比原始 API“更窄”,因此您的方法无法处理原始方法可以处理的所有调用,因此无法覆盖它。

于 2014-01-29T00:21:08.323 回答