子类之间的序列化

tun*_*fdg 5 java serialization

在访谈中,我们要求有一个Class A没有实现serializable如下所示的界面

class A
{ 
    private int a;

    A( int a)
    {
        this.a = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且有一个B扩展A并实现serializable接口的类

class B extends A implements serializable
{

    private int a , b;

    B(int a, int b)
    {
        this.a = a;
        this.b = b; 
    }
}
Run Code Online (Sandbox Code Playgroud)

现在请告诉我是否可以序列化类B,只要该类A没有序列化,假设我想序列化类的对象B,可以这样做.

dce*_*chi 4

如果不修改 A 以具有可访问的无参数构造函数,则无法序列化 B。

来自java.io.Serialized的 javadoc

为了允许不可序列化类的子类型被序列化,子类型可以承担保存和恢复超类型的公共、受保护和(如果可访问)包字段的状态的责任。仅当它扩展的类具有可访问的无参数构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这种情况,则声明类可序列化是错误的。该错误将在运行时被检测到。

在反序列化期间,将使用该类的公共或受保护的无参数构造函数来初始化不可序列化类的字段。无参数构造函数必须可供可序列化的子类访问。