Java Serialization可以将对象反序列化为父类的实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Serialization可以将对象反序列化为父类的实例相关的知识,希望对你有一定的参考价值。
我有一个实现Serializable
的基类。
class Base implements Serializable {
... //some fields
}
我还有另一个扩展基类的类。
class Another extends Base {
... //some fields
}
我有一个Another
的序列化实例。我可以将它反序列化为Base
的例子吗?
答案
是的,一般情况下你可以这样做。
最简单的示例忽略流初始化,关闭,异常等。
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
。
以上是关于Java Serialization可以将对象反序列化为父类的实例的主要内容,如果未能解决你的问题,请参考以下文章