一.父類實現序列化接口,子類自動繼承序列化接口,無需顯示申明,即子類序列化時會自動序列化父類對象,反序列化沒有問題
二.父類沒有實現序列化接口,子類實現序列化接口
1.子類可以被序列化,但是父類無法被序列化.無論如何,子類序列化的過程都可以執行,反序列能夠成功則要看父類是否有無參構造器.
JVM會在反序列化子類時自動調用父類的無參構造器創建父類對象,當父類沒有無參構造器時,反序列會失敗.
所以,子類實現序列化接口,父類沒有實現序列化接口時,必須保證父類有無參構造器,才能讓子類正常的序列化反序列化
附上個人測試用代碼,父類的無參構造器決定了子類能夠反序列化成敗
import java.io.*; /** * @author Drug * @create 2020-05-11 18:22 */ public class Test { public static void main(String[] args) { TestBean testBean = new TestBean("1"); testBean.property1 = "11111"; testBean.property2 = "22222"; System.out.println(testBean); serialization(testBean, "D:\\testBean.ser"); System.out.println("序列化成功"); TestBean deserialization = deserialization("D:\\testBean.ser"); System.out.println("反序列化成功"); System.out.println(deserialization); } /** * 序列化 * @param src 目標對象 * @param target 文件路徑 */ public static void serialization(TestBean src, String target) { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(target); oos = new ObjectOutputStream(fos); oos.writeObject(src); } catch (Exception e) { e.printStackTrace(); } finally { try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 反序列化 * @param target 文件路徑 * @return */ public static TestBean deserialization (String target){ FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream(target); ois = new ObjectInputStream(fis); Object o = ois.readObject(); return (TestBean) o; } catch (Exception e) { e.printStackTrace(); return null; }finally { try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } } } class BaseBean { public String property1; public String property2; //帶參構造 public BaseBean(String id) { } //無參構造,如沒有無參構造,子類反序列化會失敗 public BaseBean(){ } } class TestBean extends BaseBean implements Serializable { public String desc; public static final int serialVersionUID = 1; public TestBean(String id) { super(id); } @Override public String toString() { return "TestBean{" + "desc='" + desc + '\'' + ", property1='" + property1 + '\'' + ", property2='" + property2 + '\'' + '}'; } }
————————————————
版權聲明:本文為CSDN博主「DrugHua」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/drughua/article/details/106082045