Java的."Serializable"父级的子级是否自动"可序列化"

Ben*_*nas 14 java serialization

我想询问实现"Serializable"接口的父节点的子节点是否也实现了"Serializable"接口,或者换句话说,该子节点是否可以被序列化?

Ste*_*n C 22

我想询问实现"Serializable"接口的父节点的子节点是否也实现了"Serializable"接口,或者换句话说,该子节点是否可以被序列化?

第一部分的答案是肯定的.这是Java继承的自然结果.

第二部分的答案是并非总是如此!

考虑一下:

public class Parent implements Serializable {
    private int i;
    // ...
}

public class Child extends Parent {
    private final Thread t = new Thread();   // a non-serializable object
    // ...
}
Run Code Online (Sandbox Code Playgroud)

的实例Parent可以被串行化,但实例Child不能......因为它(的属性,其类型Thread)不是可序列化.

(现在,如果t声明为transient,或者如果Child使用默认序列化机制避免,则Child可以序列化.但我的观点是可序列化是一个紧急属性,而不是可继承属性.)


Ell*_*sch 8

是.如果父实现,Serializable那么任何子类也是Serializable.

static class A implements Serializable {
}

static class B extends A {
}

public static void main(String[] args) {
    Serializable b = new B(); // <-- this is a legal statement. 
}
Run Code Online (Sandbox Code Playgroud)

B也实现Serializable.

  • 只有在*不可*序列化的最接近的祖先类上才需要no-arg构造函数。由于`A`是可序列化的,因此不需要no-arg构造函数。 (2认同)