`
m635674608
  • 浏览: 4953897 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 序列化之当序列化遭遇继承

    博客分类:
  • java
 
阅读更多

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

public class SerializableEr implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
  
   // public SerializableEr(){};
}

 

public class Serial extends SerializableEr{
    int id;
	String name;
	public Serial(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public String toString() {
		return "DATA: " + id + " " +name;

	}
	public static void main(String[] args) {
        Serial serial=new Serial(1,"4234");
        System.out.println("object serial:"+serial); 
        try{
            FileOutputStream fos=new FileOutputStream("serialTest.txt"); 
            ObjectOutputStream oos=new ObjectOutputStream(fos); 
            oos.writeObject(serial); 
            oos.flush(); 
            oos.close(); 
        }catch(Exception e){
            System.out.println("Exception:"+e); 
        }
    }
}

 

运行结果如下:

object serial:DATA: 1 4234

要为一个没有实现Serializable接口的父类,编写一个能够序列化的子类是一件很麻烦的事情。java docs中提到:

“To allow subtypes of non-serializable classes to be serialized, the subtype may assume responsibility for saving and restoring the state of the supertype's public, protected, and (if accessible) package fields. The subtype may assume this responsibility only if the class it extends has an accessible no-arg constructor to initialize the class's state. It is an error to declare a class Serializable if this is not the case. The error will be detected at runtime. ”

  也就是说,要为一个没有实现Serializable接口的父类,编写一个能够序列化的子类要做两件事情:

  其一、父类要有一个无参的constructor;

  其二、子类要负责序列化(反序列化)父类的域。

  http://www.yesky.com/376/1908876.shtml

public class SerializableEr{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
  
   // public SerializableEr(){};
}
public class Serial extends SerializableEr implements Serializable{
    int id;
	String name;
	public Serial(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public String toString() {
		return "DATA: " + id + " " +name;

	}
	public static void main(String[] args) {
        Serial serial=new Serial(1,"4234");
        System.out.println("object serial:"+serial); 
        try{
            FileOutputStream fos=new FileOutputStream("serialTest.txt"); 
            ObjectOutputStream oos=new ObjectOutputStream(fos); 
            oos.writeObject(serial); 
            oos.flush(); 
            oos.close(); 
        }catch(Exception e){
            System.out.println("Exception:"+e); 
        }
    }
}

 总结:

  为一个实现Serializable接口的父类,编写一个能够序列化的子类 子类将自动的实现序列化

  为一个没有实现Serializable接口的父类,编写一个能够序列化的子类 ,只要父类实现了序列化的接口,或者,子类实现了序列化的接口。就可以序列化 

分享到:
评论

相关推荐

    Java SE编程入门教程 java序列化(共14页).pptx

    Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...

    Java实验7 序列化.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。

    Gson 中解决 json 反序列化时相同属性对应不同类型的值的问题(代码)

    Gson 中解决 json 反序列化时相同属性对应不同类型的值的问题(代码),对应文章链接:https://blog.csdn.net/ZiFung_Yip/article/details/89143255

    3分钟读阿里Java手册: 序列化

    前言 下面这句代码,相信大家可能跟我一样都非常熟悉,但是真正了解的人又有多少呢? private static final long serialVersionUID = 1L;...Java序列化保留了对象类的元数据(类、继承类等),以及对象数据,兼容性好

    J2SE中的序列化之继承

    当一个父类实现Serializable接口后,他的子类都将自动的实现序列化。 以下验证了这一点: package Serial; import java.io.Serializable; public class SuperC implements Serializable {//父类实现了序列化 int ...

    gson:一个Java序列化反序列化库,用于将Java对象转换为JSON并返回

    目标提供简单的toJson()和fromJson()方法将Java对象转换为JSON,反之亦然允许将已有的不可修改的对象与JSON相互转换Java泛型的广泛支持允许对象的自定义表示支持任意复杂的对象(具有深层继承层次结构和泛型类型的...

    JSMutable:Java中对象序列化的库

    它是由迭戈(Diego)使用MIT许可证创建的Java对象序列化库,该库在主要的序列化方法和对继承jsm.Mutable的类的结构的验证中使用了反射式编程。 对于那些想知道如何使用自反编程的Java框架序列化对象的人,此项目是您...

    JAVA基础,常见java基础问题.rar

    反序列化就是序列化的逆过程,把磁盘文件中或网络节点的二进制数据恢复成java对象的过程,通常是将二进制数据转换为对象。 序列化的应用场景:将对象存储在文件或数据库中,利用套接字在网络上进行对象传输,RMI...

    Java SE编程入门教程 java封装继承多态(共56页).pptx

    Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    序列化和反序列化 继承、封装、多态的实现原理 容器 Java集合类总结 Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制...

    vc++6.0 程序设计学与用教程

    主要包括Java编程基础知识、Java算术运算符、Java编程语法、面向对象程序设计基本概念、系统类的使用和应用、图形用户界面设计、图形处理、多媒体处理、异常处理、多线程、网络编程、输入输出处理与序列化、Java本机...

    实验5 JAVA常用类.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。

    实验9 Java输入输出流.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。

    java面试题进阶版附答案.docx

    六、序列化和反序列化:解释了Java中序列化和反序列化的概念,以及通过实现Serializable接口进行对象的序列化和反序列化的过程。 七、内部类和匿名类:介绍了Java中的内部类和匿名类的概念,包括不同类型的内部类...

    Java SE编程入门教程 java判断循环(共79页).ppt

    Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...

    Java SE编程入门教程 java泛型(共11页).pptx

    Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...

    java面试过程当中遇到的一些题目

    6. 什么是java序列化,如何实现java序列化?(写一个实例) 10 7. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 10 8. 排序都有哪几种方法?请列举。用JAVA实现一个快速排序? 10 9. Overload...

    Java实验2 反射.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。

    Java实验8 数据库.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。

    Java工程师面试复习指南

    序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器...

Global site tag (gtag.js) - Google Analytics