覆盖使用子类型的方法

use*_*409 1 java inheritance abstract-class abstract-methods

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

public abstract SomeClass Do(SomeClass o1, SomeClass o2);
Run Code Online (Sandbox Code Playgroud)

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

@Override 
public AClass Do(AClass o1, AClass o2) //AClass extends Someclass
{
//
}
Run Code Online (Sandbox Code Playgroud)

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

错误是:方法...必须覆盖或实现超类型方法

Jon*_*eet 11

您收到错误,因为它不支持相同的接口.想象一下这样的来电者:

AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());
Run Code Online (Sandbox Code Playgroud)

应该工作 - 它只是使用AbstractClass抽象方法,对吧?但是你传入的值不是AClass引用,它们只是SomeClass引用.

您的返回类型是可以的,但您声明的参数比原始API"更窄",因此您的方法无法处理原始方法可能的所有调用,因此无法覆盖它.