第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

序列化的問題

http://img1.sycdn.imooc.com//572d9a9a000104bd04030096.jpg

老師在上面說 如果實(shí)現(xiàn)了序列化接口那么其父類的則看不見父類的構(gòu)造方法被調(diào)用。

如果是這樣的話,最后的輸出結(jié)果難道不應(yīng)該是

bar1...

bar2...

嗎?為什么我的結(jié)果確實(shí)連父類的構(gòu)造方法也調(diào)用了?

package?com.Java;

import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.ObjectInputStream;
import?java.io.ObjectOutputStream;
import?java.io.Serializable;

public?class?Objectserial2?{
	public?static?void?main(String[]?args)?throws?IOException,?Exception?{
//		ObjectOutputStream?oos=new?ObjectOutputStream(
//				new?FileOutputStream("exer/obj.dat"));
//		Foo2?foo2=new?Foo2();
//		oos.writeObject(foo2);
//		oos.flush();
//		oos.close();
//		
//		//反序列化是否遞歸調(diào)用父類的構(gòu)造函數(shù)
//		ObjectInputStream?ois=new?ObjectInputStream(
//				new?FileInputStream("exer/obj.dat"));
//		Foo2?foo21=(Foo2)ois.readObject();
//		System.out.println(foo21);
//		ois.close();
		
		
		ObjectOutputStream?oos=new?ObjectOutputStream(
				new?FileOutputStream("exer/obj.dat"));
		Bar2?bar2=new?Bar2();
		oos.writeObject(bar2);
		oos.flush();
		oos.close();
		
		//反序列化是否遞歸調(diào)用父類的構(gòu)造函數(shù)
		
		ObjectInputStream?ois=new?ObjectInputStream(
				new?FileInputStream("exer/obj.dat"));
		Bar2?bar21=(Bar2)ois.readObject();
		System.out.println(bar21);
		ois.close();
		
		/*
		?*?對(duì)子類對(duì)象進(jìn)行反序列化操作時(shí),
		?*?如果父類沒有實(shí)現(xiàn)序列化接口
		?*?那么其父類的構(gòu)造函數(shù)會(huì)被調(diào)用
		?*/

	}

}




//一個(gè)類實(shí)現(xiàn)了序列化接口,那么其子類都可以實(shí)現(xiàn)序列化

class?Foo?implements?Serializable{
	public?Foo(){
		System.out.println("fooo");
	}
}
class?Foo1?extends?Foo{
	public?Foo1(){
		System.out.println("fooo11");
	}
}
class?Foo2?extends?Foo1{
	public?Foo2(){
		System.out.println("foo222");
	}
}

class?Bar?{
	public?Bar(){
		System.out.println("bar");
	}
}
class?Bar1?extends?Bar?implements?Serializable{
	public?Bar1(){
		System.out.println("bar1...");
	}
}

class?Bar2?extends?Bar1?{
	public?Bar2(){
		System.out.println("bar2...");
	}
}


正在回答

2 回答

因?yàn)?你是 Bar2 bar2 = new Bar2(); ? bar2 = (Bar2)ois.readObject();

但是老師寫的是 ? Bar2 bar2 = (Bar2)ois.readObject(); ?這里要注意的是 老師并沒有去new一個(gè)Bar2對(duì)象

而你卻是先new出來的 肯定會(huì)調(diào)用父類的構(gòu)造函數(shù)

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

差不多先生1234 提問者

非常感謝!
2016-05-17 回復(fù) 有任何疑惑可以回復(fù)我~

子類在進(jìn)行反序列化操作時(shí),如果父類實(shí)現(xiàn)了序列化的接口,則不會(huì)遞歸調(diào)用其父類的構(gòu)造函數(shù),你的代碼中父類Bar未實(shí)現(xiàn)接口Serializable,所以在實(shí)現(xiàn)反序列的時(shí)候,當(dāng)然會(huì)調(diào)用其構(gòu)造函數(shù),這個(gè)程序的輸出結(jié)果應(yīng)該是只輸出了Bar的構(gòu)造函數(shù)的內(nèi)容吧?

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

差不多先生1234 提問者

但是我輸出的內(nèi)容卻是 bar bar1... bar2... bar 所以我不懂了
2016-05-08 回復(fù) 有任何疑惑可以回復(fù)我~
#2

圊澀的蘋果 回復(fù) 差不多先生1234 提問者

bar bar1... bar2... bar 首先就是你是Bar1實(shí)現(xiàn)的序列化接口,而Bar1的父類Bar并沒有實(shí)現(xiàn)序列化接口,所以在readObject()的時(shí)候就會(huì)調(diào)用到Bar類的構(gòu)造函數(shù),而Bar1類和其子類Bar2就不會(huì)調(diào)用其構(gòu)造函數(shù)
2016-06-08 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
文件傳輸基礎(chǔ)——Java IO流
  • 參與學(xué)習(xí)       133811    人
  • 解答問題       1058    個(gè)

為您介紹IO流的使用,以及對(duì)象的序列化和反序列化的內(nèi)容

進(jìn)入課程

序列化的問題

我要回答 關(guān)注問題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)