文档章节

父类可序列化子类可序列化否乎?

Oscarfff
 Oscarfff
发布于 2016/02/16 17:14
字数 489
阅读 31
收藏 0

关于这个问题,写了个简单的代码测试了下: 
可序列化的类Father
 

package com.taobao.test;

import java.io.Serializable;

/**
 * @author tina.wyn
 *
 */
public class Father implements Serializable {
	
	private static final long serialVersionUID = 1L;

	private Integer fatherage;
	
	private String str;
	
	public Father() {
		fatherage = 50;
		str = "I am father";
	}

	public Integer getNumber() {
		return fatherage;
	}

	public void setNumber(Integer number) {
		this.fatherage = number;
	}

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}
}

不可序列化的类Mother 

package com.taobao.test;

public class Mother {

	private Integer matherage;

	private String str;
	
	public Mother(){
		matherage = 30;
		str = "I am mother";
	}

	public Integer getMatherage() {
		return matherage;
	}

	public void setMatherage(Integer matherage) {
		this.matherage = matherage;
	}

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}
	

}

子类Son继承了父类Father 

package com.taobao.test;

/**
 * @author tina.wyn
 *
 */
public class Son extends Father {
	private static final long serialVersionUID = 1L;

	
	private int age;
	
	private transient String unserialize;
	
	public Son() {
                age = 10;
		unserialize = "hi";
	}
	

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}


	public String getUnserialize() {
		return unserialize;
	}


	public void setUnserialize(String unserialize) {
		this.unserialize = unserialize;
	}

	
}
package com.taobao.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * @author tina.wyn
 *
 */
public class TestSerialize {

	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		
		Son s = new Son();
		ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("hello")));
		objectOutputStream.writeObject(s);
		
		ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("hello")));
		Son sn = (Son) objectInputStream.readObject();
		
		System.out.println(sn.getAge());
		System.out.println(sn.getNumber());
		System.out.println(sn.getStr());
		System.out.println(sn.getUnserialize());
           }
}

运行结果 

10
50
I am father
null

由此证明父类可序列化子类也可序列化,而sn.getUnserialize()为null是因为子类里将它定义为了transient 类型的,所以子类的属性可否序列化取决于如何定义。 
现在我们在子类里加入Mother类的引用
 

package com.taobao.test;

/**
 * @author tina.wyn
 *
 */
public class Son extends Father {
	private static final long serialVersionUID = 1L;

	
	private int age;
	
	private transient String unserialize;
        Mother mother;
	
	public Son() {
		mother = new Mother();
		age = 10;
		unserialize = "hi";
	}
	

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}


	public String getUnserialize() {
		return unserialize;
	}


	public void setUnserialize(String unserialize) {
		this.unserialize = unserialize;
	}


	public Mother getMother() {
		return mother;
	}


	public void setMother(Mother mother) {
		this.mother = mother;
	}

	
}

运行结果: 

  Exception in thread "main" java.io.NotSerializableException: com.taobao.test.Mother
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at com.taobao.test.TestSerialize.main(TestSerialize.java:21)

吼吼,出错鸟~Mother类不支持序列化哈~~~

本文转载自:http://yinny.iteye.com/blog/1776488

共有 人打赏支持
Oscarfff
粉丝 72
博文 815
码字总数 96913
作品 0
崇明
后端工程师
私信 提问
Head First Java

条件语句 &和|可以用作条件语句,但是是长连接,左右两边的表达式必须都执行完!这和&&和||不同,&&和||是短连接,只要左边的表达式已经能够计算出整个表达式的结果,右边的表达式就不会执行...

方武卓
2015/03/29
0
0
(1)java序列化--java.io.Serializable接口解析

(PS:本文为作者原著,如需转载,请注明出处-_^) 使用java以来,序列化随处可见,至于为什么要用序列化、序列化能解决什么问题,作为一个普通的码农,一般不怎么会去深入研究,由于最近在看...

sumekey
2011/09/07
0
0
fastjson反序列化不成功的一个问题

@wenshao 你好,想跟你请教个问题: fastjson反序列化不成功的一个问题: 父类属性的set方法有返回值(返回父类本身,为了写代码时方便链式编程),反序列化到子类对象时,父类中的属性反序列化...

hzwei206
2016/05/20
1K
0
关于序列化

Java 序列化是指:将一个对象转化成一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。 需要持久化,对象必须继承 java.io.Serializable 接口。 父类继承 java.io....

xiaoye08050141
01/11
0
0
序列化中关于继承

实验1 结论: 如果Super类包含需要序列化的primitive类型变量,应该实现writeObject()和readObject()方法,并在里面分别调用ObjectOutputStream.defaultWriteObject()和ObjectInputStream.d...

Winchell
2016/12/14
3
0

没有更多内容

加载失败,请刷新页面

加载更多

MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
今天
3
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
6
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
12
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
4
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部