【问题标题】:Is a subclass of a "Serializable" class automatically "Serializable"?“Serializable”类的子类是否会自动“Serializable”?
【发布时间】:2014-09-04 13:08:27
【问题描述】:

实现Serializable接口的类的子类是否也实现Serializable?也就是说,子类的实例也可以序列化吗?

【问题讨论】:

  • 来自 javadoc “可序列化类的所有子类型本身都是可序列化的”。请阅读 javadoc。
  • @talex - 它不是那么简单。看我的回答,

标签: java serialization


【解决方案1】:

我想问实现“Serializable”接口的parent的child是否也实现了“Serializable”接口,或者说那个child是否可以被序列化?

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

第二部分(“换句话说……”)的答案并不总是!

考虑一下:

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

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

Parent 的实例可以被序列化,但Child 的实例不能……因为它有一个属性,其类型 (Thread) 没有实现 Serializable

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

【讨论】:

    【解决方案2】:

    是的。如果父类实现了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. 
    }
    

    B 也实现了Serializable

    【讨论】:

      【解决方案3】:

      当父级可序列化时,我们不需要无参数构造函数。

      但是当子级是可序列化的而不是父级时,我们必须在父级中有一个无参数的常量,以便在反序列化时根据需要设置值,否则我们将有默认值。

      【讨论】:

      • 虽然这是真的,但它与所提出的问题无关。问题是关于父级声明为Seriablizable的情况。
      【解决方案4】:

      如果父类具有可序列化行为,则默认所有子类都具有可序列化行为。

      class Parent implements Serializable{
      
          int x;
      
      }
      
      class Children extends Parent{
      
          int m;
          public static void main(String args[]){
          Children c = new Children();
          c.m =10;
          c.x =20;
          // Enter Serialization Code;
          // Enter De serialization Code;
      }
      }
      

      注意:当您读取反序列化对象时,您将能够检索序列化状态。

      【讨论】:

      • 冗余答案。它只是重复了之前答案所说的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2023-03-07
      • 2011-05-28
      • 1970-01-01
      • 2016-12-24
      • 2013-10-13
      • 2010-10-10
      相关资源
      最近更新 更多