亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于如何在子類的構造方法中顯示調用父類有參的構造方法?

父類:
public?class?Animal?{
	public?int?age?=?20;
	public?String?name;
	public?void?eat(){
		System.out.println("動物具有吃東西的能力");
	}
	/*public?Animal(){
		System.out.println("Animal類執行了");
	}*/
	public?Animal(int?age){
		this.age?=?age;
		System.out.println(age);
	}

}


子類:
public?class?Dog?extends?Animal?{
	public?static?int?age?=?15;
	public?void?eat(){
		System.out.println("狗具有吃骨頭的能力");
	}
	public?Dog(){
		super(age);
		System.out.println("dog類執行了");
	}
	public?void?method(){
		super.eat();
	}
}
我在定義時為什么要在子類的age屬性定義前加static?
既然是父類的age?為何我在調用method()時輸出的age是15而不是父類的20?


正在回答

2 回答

你子類構造方法中調用的age是Static的age,就是子類的age,首先回答static的問題,static是靜態的意思,即未創建實例對象就可以使用被static聲明的屬性,如果你不加static,在創建Dog類時,1.首先進行父類的默認值初始化,就是age=20,2.然后調用父類構造函數,3.再進行子類默認值初始化,即age=15,4.再調用子類構造函數,在第二步時,發現父類構造方法需要傳一個值(super(age);)這時候編譯器找age,發現找不到age,因為這時候還沒有進行到第三步啊,age沒有初始化為15,報錯,而將其聲明為static,即使不創建對象age都是15,這就不必解釋了,所以要加static

第二個問題,就像之前所說的一樣,加了static之后,進行第二步時,將age=15傳給父類,修改了父類中的age值,導致父類和子類的age都是15,所以無論怎么輸出都是15

0 回復 有任何疑惑可以回復我~

http://img1.sycdn.imooc.com//573fcb5d00017c9e12300414.jpg可以這樣

0 回復 有任何疑惑可以回復我~
#1

慕粉15555107797

你這個都沒有用到構造方法,,,他想說的是用構造方法怎么樣能得到父類的age
2016-06-28 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于如何在子類的構造方法中顯示調用父類有參的構造方法?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號