所以我有这个AbstractBook
类
public abstract class AbstractBook<T extends AbstractPage> implements Serializable{
public AbstractBook() {
}
public abstract void addPage(T var1);
}
我有一个子类:
public class Book extends AbstractBook {
private ArrayList<Page> allPages;
private String title;
Book(String title){
allPages = new ArrayList<Page>();
}
@Override /** Doesn't Work */
public void addPage(Page page) {
this.allPages.add();
}
}
在子类addPage
中方法,我无法重写给定形式的方法,因为参数要求是 AbstractPage
类型,即使 Page
扩展自AbstractPage
:
public abstract class AbstractPage implements Serializable {
public AbstractPage() {
}
}
和
public class Page extends AbstractPage {
private String content;
public Page(String Content){
this.content = Content;
}
}
- 到底为什么会这样?
- 不是
T
定义为<T extends AbstractPage>
,因此,Page
应该是addPage
中参数可接受的类型方法 ?它坚持编译器坚持AbstractPage
类型。 - 或者
<T extends AbstractPage>
实际上并不适用于T var1
在addPage
方法? - 但即便如此,还有什么能阻止
addPage(Page page)
编译方法?
最佳答案
您正在扩展原始类型。
改变
public class Book extends AbstractBook
至
public class Book extends AbstractBook<Page>
此外,this.allPages.add();
可能应该是 this.allPages.add(page);
。
关于java - 对 <T extends Class> 行为感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932478/