所以我有这个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);
。