zoukankan      html  css  js  c++  java
  • 序列化+继承

    一、序列化作用:

    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

  • 相关阅读:
    C#使用SSDB管理增量日志并提供查询
    请假系统特例规则详细设计
    2014年国内最热门的.NET开源平台
    MQTT--入门
    转MQTT--Python进行发布、订阅测试
    Python修改文件权限
    Python Windows文件操作
    python random 学习
    Python---copy()、deepcopy()与赋值的区别
    使用Git Bash从Git上下载代码到本地以及上传代码到码云Git
  • 原文地址:https://www.cnblogs.com/lyqf/p/11124947.html
Copyright © 2011-2022 走看看