【发布时间】:2011-03-06 22:49:34
【问题描述】:
我有以下抽象类:
public abstract class AbSuperClass1<K,S> {
//class definition
}
和:
public abstract class AbSuperClass2<K,S> {
public abstract <Q extends AbSuperClass1<K,S>> void method(Q arg);
...
}
然后我有两个具体的实现
public class Concrete1 extends AbSuperClass<String, String>{
//class definition
}
和:
public class Concrete2 extends AbSuperClass2<String, String>{
public void method(Concrete1 arg){
//method definition
}
}
然而,这不会编译,因为 Concrete1 不被识别为 Concrete2 中方法参数的有效类型,但据我所知,Concrete1 是正确的类型,因为它扩展了 AbSuperClass1。
我哪里错了?
【问题讨论】:
-
如果可能,我建议使用 Eclipse 作为编写 Java 代码的环境。Eclipse 会准确地向您显示错误所在,并提供一个下拉菜单供您使用鼠标添加缺少的功能点击。这种能力可以显着加快您的学习曲线和开发时间。
-
public abstract <Q extends AbSuperClass1<K,S>> void method(Q arg);相当于public abstract void method(AbSuperClass1<K,S> arg);。
标签: java generics inheritance oop