我一直试图理解这个例子发生了什么,但到目前为止还无法理解。有人可以帮忙吗?
假设我有这两个抽象类:
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
结构?
最佳答案
您可以通过修改 Book
类来使其工作:
public class Book extends AbstractBook<AbstractPage> {
private ArrayList<AbstractPage> allPages;
private String title;
Book(String title){
allPages = new ArrayList<AbstractPage>();
}
@Override
public void addPage(AbstractPage page) {
this.allPages.add(page);
}
}
在定义Book
类时,您应该使用AbstractBook
的类型参数。如果要插入 AbstractPage
类型的元素,ArrayList
必须为该类型。
关于java - 将子类传递给具有抽象类参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56927990/