文档章节

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

Oscarfff
 Oscarfff
发布于 2016/02/16 17:14
字数 489
阅读 33
收藏 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
粉丝 73
博文 815
码字总数 96913
作品 0
崇明
后端工程师
私信 提问
Head First Java

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

方武卓
2015/03/29
0
0
fastjson反序列化不成功的一个问题

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

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

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

xiaoye08050141
2018/01/11
0
0
(1)java序列化--java.io.Serializable接口解析

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

sumekey
2011/09/07
0
0
序列化中关于继承

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

Winchell
2016/12/14
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部