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

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

關于多層繼承的問題,有代碼。(多層繼承是我自己想出來的詞,不知道恰不恰當~)

//先看代碼
//創建一個父類
public?class?Plant{
?String?color;
?String?kind;
?private?int?age;
?public?void?eat(){
???System.out.println("有的植物可以被食用,比如香蕉。");
?}
}
//創建子類
public?class?Banana?extends?Plant{

}
//創建運行類
public?class?Run{
public?static?void?main(String[]?args){
?Banana?banana=new?Banana();
??banana.color="yellow";
??banana.kind="fruit";
??banana.eat();
??System.out.println("香蕉的顏色是"+banana.color);
??System.out.println("香蕉的種類是"+banana.kind);
}
}
//運行結果:
//有的植物可以被食用。
//香蕉的顏色是yellow
//香蕉的種類是fruit
//再創建一個Banana的子類
public?Hello?extends?Banana{

}
//再創建一個運行類
public?class?Run2{
public?static?void?main(String[]?args){
?Hello?hello=new?Hello();
?hello.eat();
?System.out.println(hello.color);
?System.out.println(hello.kind);
}
}
//運行結果:
//有的植物可以被食用。
//null
//null

為什么Hello類作為Banana的子類卻不能繼承Banana的屬性和方法(顯然eat方法是繼承Plant);
課程里說Java只能單繼承,我創建的Hello類是Banana的子類,卻繼承了Plant類的屬性和方法,這是不是有兩個父類呢?
望高手解答,謝謝!


正在回答

2 回答

public?class?Run2{
public?static?void?main(String[]?args){
?Hello?hello=new?Hello();??
?hello.eat();
?//你并沒有調用父類方法的color和kind啊,而且也沒有給這個屬性賦初始值,就默認為null了。
?//你只是在run中的main方法中給Banana賦值了,對Hello并沒有影響。
?//你在這里輸入hello.color="test";?hello.kind="test"就好了,或者給Plant的兩個屬性賦一個初始值。
?System.out.println(hello.color);
?System.out.println(hello.kind);
}
}


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

_Jack_Han_ 提問者

非常感謝!
2016-01-07 回復 有任何疑惑可以回復我~
#2

_Jack_Han_ 提問者

Hello作為Banana的子類,調用Banana的屬性也需要在前面加上類名嗎?子類不是可以直接繼承父類屬性的值嗎?
2016-01-07 回復 有任何疑惑可以回復我~
#3

_Jack_Han_ 提問者

我明白了,屬性的初始值我是在Run類里定義的,雖然是通過Banana的對象,但是Banana的類里是空的,所以Hello什么都沒繼承到。謝謝你。但是為什么Hello可以繼承Plant的eat()方法呢?Hello是Banana的子類。
2016-01-07 回復 有任何疑惑可以回復我~
#4

Its_forever 回復 _Jack_Han_ 提問者

是的。如果Banana里面有一個where(產地)的屬性。 public class Banana extends Plant{ String where ="China"; } 那么在main方法中: Hello hello=new Hello(); hello.where ="American"; System.out.println(hello.where); //輸出American 如果沒有 hello.where ="American";這句,輸出China。這樣就是子類直接繼承了父類屬性的值。
2016-01-07 回復 有任何疑惑可以回復我~
#5

Its_forever 回復 _Jack_Han_ 提問者

Hello可以繼承Plant的eat()方法是因為Hello雖然是Banana的直接子類。但是Banana繼承了Plant。所以Hello也就間接的繼承了Plant。 相當于,Banana繼承了Plant,Banana就擁有了Plant除了private的所有屬性和方法。 Hello繼承了Banana也就擁有了Banana除了private的所有屬性和方法(其中包括了從Plant那兒繼承而來的東西)。
2016-01-07 回復 有任何疑惑可以回復我~
#6

慕仰9290566

Plant是banna的父類,那子類肯定會繼承父類除了私有的都繼承下來,那雖然子類banna是空的,但它繼承了父類的就擁有了父類的屬性和方法啊,然后hello繼承banna,hello也是會把banna的除私有的全繼承啊,Plant是hello的間接父類并不是它的直接父類
2016-05-10 回復 有任何疑惑可以回復我~
#7

慕仰9290566 回復 _Jack_Han_ 提問者

‘Banana的類里是空的,所以Hello什么都沒繼承到"不怎么對
2016-05-10 回復 有任何疑惑可以回復我~
查看4條回復

eat方法的運行結果少寫了“比如香蕉”,請忽略。

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

舉報

0/150
提交
取消

關于多層繼承的問題,有代碼。(多層繼承是我自己想出來的詞,不知道恰不恰當~)

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

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

幫助反饋 APP下載

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

公眾號

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