奇妙な問題があります。私には3つのクラスがあります。本(要約)、および2つのサブクラス(フィクション、ノンフィクション)。ブックリファレンスの配列を作成しました。その配列は、両方のサブクラスのオブジェクトを保持できます。私はフィクションクラスの次のコードを持っています。
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など)を格納しようとするとこの例外がスローされると書かれていますが、この場合、それらはすべて同じオブジェクトです。どちらのクラスもスーパークラスの子です。つまり、同じタイプです。私は告白されています。ここで少し助けてください?