覆盖使用子类型的方法

时间:2014-01-29 00:17:13

标签: 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的子类型?

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

1 个答案:

答案 0 :(得分:11)

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

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

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

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