为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2021-12-18 09:48:29
我有一个实现Serializable.class Base implements Serializable {     ... //some fields}我还有另一个扩展基类的类。class Another extends Base {     ... //some fields}我有一个序列化的Another. 我可以将它反序列化为 的实例Base吗?
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

是的,通常您可以这样做。


忽略流初始化、关闭、异常等的最简单示例。


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根据需要强制转换为。


查看完整回答
反对 回复 2021-12-18
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信