博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序列化+继承
阅读量:6413 次
发布时间:2019-06-23

本文共 1273 字,大约阅读时间需要 4 分钟。

一、序列化作用:

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接口后,他的子类都将自动的实现序列化。 

 

参考博客:

  

转载于:https://www.cnblogs.com/lyqf/p/11124947.html

你可能感兴趣的文章
Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet 3.0+JSP 2.2深入剖析与实例应用
查看>>
topcoder srm 680 div1 -3
查看>>
具体数学第二版第四章习题(1)
查看>>
高效前端优化工具--Fiddler入门教程
查看>>
【翻译】我钟爱的HTML5和CSS3在线工具
查看>>
Java多线程学习(吐血超详细总结)
查看>>
css3 变形
查看>>
Win7 64bit 安装Mysql5 出错 无法启动服务。
查看>>
嵌入式 H264参数语法文档: SPS、PPS、IDR以及NALU编码规律
查看>>
初识Opserver,StackExchange的监控解决方案
查看>>
给大家讲解一下JavaScript与后台Java天衣无缝相结合
查看>>
探索HTML5之本地文件系统API - File System API
查看>>
javascript有用代码块(1)
查看>>
libevent 笔记
查看>>
PHP实现人人OAuth登录和API调用
查看>>
redis源码笔记 - initServer
查看>>
FindBugs工具常见问题
查看>>
ECSHOP报错误Deprecated: preg_replace(): The /e modifier is depr
查看>>
【iOS】iOS之Button segue弹出popOver消除(dismiss)问题
查看>>
java多线程系列5-死锁与线程间通信
查看>>