提问者:小点点

使用儿童类作为返回类型时,不考虑实现抽象方法


我有课

abstract class A<T> {

    public abstract A<T> someFunction(A<?> obj);
}

public class B extends A<Integer>{

    public B someFunction(B obj){...}
}

我收到一个错误,说类B必须被声明为抽象的,或者必须实现抽象方法某个函数(A

这是我看到的一种解决方案,我可以将A更改为类似A的内容


共1个答案

匿名用户

B.一些函数()可以返回一个比A.一些函数()更派生的类。它仍然是相同的方法,并且覆盖有效。

但是,B.一些函数()接受比A.一些函数()派生的类的参数是不好的。当您尝试这样做时,覆盖会中断。

可以这样想:有人可能引用了一个A,它实际上是B的一个实例。他们可能会调用它传递一个实际的A。但是,B.一些函数()需要一个B的实例,它会尝试调用B的方法,这些方法不存在于传递的A中。这是行不通的。