Java 存储相同类型但仍获取ArrayStoreException
我有个奇怪的问题。我有三节课。书籍(摘要)和两个子类(小说、非小说类)。我已经创建了一系列参考书。该数组可以容纳两个子类的对象。我有以下小说课的代码Java 存储相同类型但仍获取ArrayStoreException,java,Java,我有个奇怪的问题。我有三节课。书籍(摘要)和两个子类(小说、非小说类)。我已经创建了一系列参考书。该数组可以容纳两个子类的对象。我有以下小说课的代码 public class Fiction extends Book{ public Fiction(String title) { super(title); setPrice(); } public void setPrice() { super.price = 24.99; } } 和非小说类的“相同”代码
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;
公共班机{
公共静态void main(字符串[]args){
但同样的代码也适用于虚构类。我查看了java文档,它说当我试图在数组中存储不同的对象(如字符串和Int)时会引发此异常,但在本例中,它们都是相同的对象。这两个类都是超类的子类,也就是说,它们属于同一类型。我很抱歉。请在此提供一些帮助?您不能将
非小说类
放在新小说[6]
中
你被这样一个事实误导了:你可以将虚构的数组分配给Book[]
类型的变量(数组协方差)。
正如您所发现的,这是不可能的,因为小说[]
不能被视为书籍[]
(可变类型不能是协变的)
这是Java中的一个设计缺陷。您不能将非虚构的放在新小说[6]
中
你被这样一个事实误导了:你可以将虚构的数组分配给Book[]
类型的变量(数组协方差)。
正如您所发现的,这是不可能的,因为小说[]
不能被视为书籍[]
(可变类型不能是协变的)
这是Java中的一个设计缺陷。替换此:
Book[] book = new Fiction[6];
附:-
Book[] book = new Book[6];
通过使用第一种声明方式,您实际上是在告诉编译器数组
将包含虚构
类型的对象,而不是书籍
的任何其他子类型
你把自己弄糊涂了:-
Book book = new Fiction();
及
替换此项:-
Book[] book = new Fiction[6];
附:-
Book[] book = new Book[6];
通过使用第一种声明方式,您实际上是在告诉编译器数组
将包含虚构
类型的对象,而不是书籍
的任何其他子类型
你把自己弄糊涂了:-
Book book = new Fiction();
及
请注意,即使类是抽象的(或实例),您仍然可以构造该类型的新数组实例,例如new Serializable[]。请注意,即使类是抽象的(或实例),您仍然可以构造该类型的新数组实例,例如new Serializable[]哦,上帝!你是对的。我真的把自己弄糊涂了。天哪,谢谢。我知道我不能那样做,但我把自己弄糊涂了。必须多加注意。谢谢上帝!你是对的。我真的把自己弄糊涂了。天哪,谢谢。我知道我不能那样做,但我把自己弄糊涂了。必须多加注意。谢谢。我把自己弄糊涂了。谢谢。真的。我参与了谢谢我自己。