BB
は、B
の親です。 A
はスタンドアロンクラスです。私がこのコードでやっているのは、タイプB
のオブジェクトをファイルに書き込んだ後にそれを読み取ることだけです。継承付きシリアル化可能
このコードは正常に動作します。さらに、クラスがSerializable
の場合、そのサブクラスは自動的にSerializable
になります。
これを念頭に置いて、Bがシリアル化可能ではなく、BB(その親)がNotSerializableException
になるのはなぜですか?どちらの場合も同じ出力が期待されます。
public class Main {
public static void main(String[] args) {
B bb = new B();
B bb2 = null;
try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("text.ser"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("text.ser"))){
oos.writeObject(bb);
bb2 = (B) ois.readObject();
}catch(Exception e){e.printStackTrace();}
}
}
class A {
int a = 1, hello=7;
A() {a = 2;}
}
class BB {
int bb = 1;
A aInstance = new A();
BB() {bb = 2;}
}
class B extends BB implements Serializable{
int b = 1;
B() {b = 2;}
}