Java 重写使用子类型的方法

Java 重写使用子类型的方法,java,inheritance,abstract-class,abstract-methods,Java,Inheritance,Abstract Class,Abstract Methods,我有一个抽象类,它有一个抽象方法: public abstract SomeClass Do(SomeClass o1, SomeClass o2); 然后,当我在一个具体类中实现时,该类扩展了之前具有该方法的抽象类,我得到一个错误: @Override public AClass Do(AClass o1, AClass o2) //AClass extends Someclass { // } 既然AClass是SomeClass的子类型,为什么会出现错误 错误是:方法。。。必须重写或

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

public abstract SomeClass Do(SomeClass o1, SomeClass o2);
然后,当我在一个具体类中实现时,该类扩展了之前具有该方法的抽象类,我得到一个错误:

@Override 
public AClass Do(AClass o1, AClass o2) //AClass extends Someclass
{
//
}
既然AClass是SomeClass的子类型,为什么会出现错误


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

由于它不支持相同的接口,因此出现错误。想象一个这样的来电者:

AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());
这应该行得通——它只是使用AbstractClass抽象方法,对吗?但是您传递的值不是AClass引用,它们只是SomeClass引用


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

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

AbstractClass x = new ImplementingClass();
x.Do(new SomeClass(), new SomeClass());
这应该行得通——它只是使用AbstractClass抽象方法,对吗?但是您传递的值不是AClass引用,它们只是SomeClass引用


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

您得到了什么错误?您得到了什么错误?