Итак, у меня есть 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)
метод от компиляции?