Я пытался понять, что происходит с этим примером, но пока не смог.Кто-нибудь может помочь?
Скажите, у меня есть два абстрактных класса:
public abstract class AbstractBook<T extends AbstractPage> implements Serializable{
public AbstractBook() {
}
public abstract void addPage(T var1);
}
и
public abstract class AbstractPage implements Serializable {
public AbstractPage() {
}
}
И классы, которые расширены следующим образом:
public class Book extends AbstractBook {
private ArrayList<Page> allPages;
private String title;
Book(String title){
allPages = new ArrayList<Page>();
}
@Override
public void addPage(AbstractPage page) {
this.allPages.add();
}
}
и
public class Page extends AbstractPage {
private String content;
public Page(String Content){
this.content = Content;
}
}
Итак ..
В классе Book
существует метод с именем addPage
.Однако я могу передать объект класса Page
этому методу;Я не могу добавить этот объект к ArrayList<Page> allPages
.
Почему именно это?Я имею в виду, что это потому, что компилятор ожидает тип AbstractPage
вместо Page
.Но почему тогда я могу вызывать метод, например thisbook.addPage(pageObject)
?
Итак, другими словами, он позволяет мне передавать объект подкласса, но не позволяет мне ничего делать с этим переданным объектом.
И как обойти это, чтобы я мог добавить этот pageObject в структуру ArrayList<Page> allPages
?