Java序列化可以将对象反序列化为父类的实例吗

我有一个实现Serializable.


class Base implements Serializable { 

    ... //some fields

}

我还有另一个扩展基类的类。


class Another extends Base { 

    ... //some fields

}

我有一个序列化的Another. 我可以将它反序列化为 的实例Base吗?



叮当猫咪
浏览 150回答 1
1回答

大话西游666

是的,通常您可以这样做。忽略流初始化、关闭、异常等的最简单示例。class Base implements Serializable {     String a;    Base(String a) { this.a = a; }}class Access extends Base {     String b;    Base(String a, String b) { super(a); this.b = b; }}class Test {    public static void main(String[] args) {        Access access = new Access("string1", "string2");        // Serialization          ObjectOutputStream out = new ObjectOutputStream(...);        out.writeObject(access);        // Deserialization         ObjectInputStream in = new ObjectInputStream(...);        Base base = (Base) in.readObject();        System.out.println("Base.a = " + base.a); // ok, prints "string1"        // System.out.println("Access.b = " + base.b); // -> compilation error -- this is not an Access object; "string2" has not been deserialized.    }}但是,没有什么理由这样做。您始终可以反序列化Access以获取所有数据,然后Base根据需要强制转换为。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java