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

问题描述 投票:1回答:1

我有一个实现Serializable的基类。

class Base implements Serializable { 
    ... //some fields
}

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

class Another extends Base { 
    ... //some fields
}

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

java serialization
1个回答
0
投票

是的,一般情况下你可以这样做。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.