我有课
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的内容
B.一些函数()
可以返回一个比A.一些函数()
更派生的类。它仍然是相同的方法,并且覆盖有效。
但是,B.一些函数()
接受比A.一些函数()
派生的类的参数是不好的。当您尝试这样做时,覆盖会中断。
可以这样想:有人可能引用了一个A
,它实际上是B
的一个实例。他们可能会调用它传递一个实际的A
。但是,B.一些函数()
需要一个B
的实例,它会尝试调用B
的方法,这些方法不存在于传递的A
中。这是行不通的。