【发布时间】:2012-09-28 15:35:23
【问题描述】:
我有一个奇怪的问题。我有三个班。 Book (abstract) 和两个子类 (Fiction, Nonfiction)。我已经创建了一系列书籍参考。该数组可以包含两个子类的对象。我有以下小说类的代码。
public class Fiction extends Book{
public Fiction(String title) {
super(title);
setPrice();
}
public void setPrice() {
super.price = 24.99;
}
}
非小说类的“相同”代码
public class Nonfiction extends Book{
public Nonfiction(String title) {
super(title);
setPrice();
}
public void setPrice() {
super.price = 37.99;
}
}
这是主程序。
import javax.swing.JOptionPane;
公共类主{
public static void main(String[] args) {
Book[] book = new Fiction[6];
for(int i = 0; i<book.length; i++) {
if(i<4) {
String title = JOptionPane.showInputDialog("Enter fiction book, no "+i);
book[i] = new Fiction(title);
} else {
String title = JOptionPane.showInputDialog("Enter non fiction book, no "+i);
book[i] = new Nonfiction(title);
}
}
for(int x = 0; x<book.length; x++) {
System.out.println("Book named "+book[x].getTitle()+" costs "+book[x].getPrice());
}
}
}
出于任何原因,我在这条线上遇到了 ArrayStoreException ..
book[i] = new Nonfiction(title);
但相同的代码适用于 Fiction 类。我检查了 java 文档,它说当我尝试将不同的对象存储在数组中(如 String 和 Int )时会引发此异常,但在这种情况下它们都是相同的对象。这两个类都是超类的子类,也就是说,它们属于同一类型。我很困惑。请问这里有什么帮助吗?
【问题讨论】:
-
请注意,即使是抽象类(或实例),您仍然可以构造该类型的新数组实例,例如新的可序列化[]。
标签: java