我有一个抽象类,有一个抽象方法:
public abstract SomeClass Do(SomeClass o1, SomeClass o2);
然后当我在一个具体类中实现时,该类扩展了具有之前方法的抽象类,我得到一个错误:
@Override
public AClass Do(AClass o1, AClass o2) //AClass extends Someclass
{
//
}
为什么我得到错误,因为AClass是SomeClass的子类型?
错误是:方法......必须覆盖或实现超类型方法
答案 0 :(得分:11)
您收到错误,因为它不支持相同的界面。想象一下这样的来电者:
AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());
应该工作 - 它只是使用AbstractClass
抽象方法,对吗?但是,您传入的值不是AClass
引用,它们只是SomeClass
引用。
您的返回类型是可以的,但您声明的参数比原始API“更窄”,因此您的方法无法处理原始方法可能的所有调用,因此无法覆盖它。