序列化+继承

一、序列化作用:

1系列化是干什么的?


       序列化简单来说就保存对象在内存中的状态也可以说是实例化变量。这是Java提供的用来保存 Object state,一种保存对象状态的机制。只有实现了serializable接口的类的对象才能被实例化。


2什么情况下会用到序列化?


     1当你想把内存中的对象写入到硬盘时

     2当你想用套接字在网络上传输对象时

     3当你想通过RMI调用对象时

    (RMI是什么东西?):RMI总结来说就是远程调用对象,在一个jvm上调用另一个jvm的对象。

3序列化需要注意的事项

     1序列化只保存对象的状态,而不管对象的方法。

     2当一个父类实现了序列化,它的子类也自动实现序列化,不用显示进行实现了。

     3当一个实例对象引用其他对象,当序列化该对象时也把引用的对象进行了实例化。

个人总结:serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口即可。

二、为一个实现Serializable接口的父类,编写一个能够序列化的子类 子类将自动的实现序列化 (序列化遇到继承)

为一个没有实现Serializable接口的父类,编写一个能够序列化的子类 1, 父类要有一个无参的constructor;2, 子类要先序列化自身,然后子类要负责序列化父类的域

父类实现了Serializable,子类不需要实现Serializable

  相关注意事项
    a)序列化时,只对对象的状态进行保存,而不管对象的方法;
    b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
    c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
    d)并非所有的对象都可以序列化,至于为什么不可以,有很多原因了,比如:
        1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
       2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分配,而且,也是没有必要这样实现。

例子: 

1,父类实现了Serializable,子类没有,

父类有int a = 1int b = 2int c = 3

子类有int d = 4int e = 5

序列化子类的时候,d和e会不会被序列化?(答案:会)

2,反过来父类未实现Serializable,子类实现了,序列化子类实例的时候,父类的属性是直接被跳过不保存,还是能保存但不能还原?(答案:值不保存)

解:父类实现接口后,所有派生类的属性都会被序列化。子类实现接口的话,父类的属性值丢失。

java中序列化之子类继承父类序列化

当一个父类实现Serializable接口后,他的子类都将自动的实现序列化。 

参考博客:http://www.yesky.com/376/1908876.shtml

  https://blog.csdn.net/liuxiao723846/article/details/52005532

原文地址:https://www.cnblogs.com/lyqf/p/11124947.html