2016-04-23 63 views
1

如果我有一個名爲AmericanFender子延伸擋泥板,而擋泥板延長超BassGuitars,爲什麼會是這樣需要與繼承邏輯援助

AmericanFender amFen = new AmericanFender(); System.out.println(amFen.brand);

沒有制定出amFen.brand等於「芬達」當

Fender fen = new Fender() fen.brand = Fender;

相反amFen.brand是走出來爲空。我認爲自從AmericanFender擴展Fender以來,只要它們是公開的,它就繼承了Fender的實例變量(它們是從BassGuitars繼承的)?我顯然是在錯誤地思考繼承問題,所以有人可能會把我引向正確的方向嗎?非常感激!

+0

爲什麼AmericanFender是自己的班級?我覺得這應該只是一種類型爲「美式」的Fender的實例 –

+0

這只是我玩弄繼承的一個小程序。這可能是更好的做法。 –

+0

基本上,我有一條規則,我只創建子類來擴展或重寫父類的功能。任何可變的「實例變量」都不需要新類 –

回答

1

繼承中,AmericanFender DOES繼承Fender的實例變量。這意味着它將具有與Fender相同的字段。這並不意味着它會在這些字段中具有相同的值。它將有一個名爲品牌的空白字段,這就是你所看到的。

如果你想讓它繼承的價值,你可以做一個方法,你Fender類中:

public String getBrand() { 
return "Fender"; 
} 

然後你就可以撥打:

AmericanFender f = new AmericanFender(); 
System.out.println(f.getBrand()); 
+0

哦太棒了!男人我覺得有點傻,這是一個相對簡單的答案。謝謝你,我現在明白了。當我能夠時,我會接受答案。非常感激! –

+0

@BobRoss沒問題 - 樂於幫忙。 – nhouser9

+0

只有當它們至少受到保護時,它纔會侵入類字段(不是實例變量)。 – m0skit0

0

如果你可以發佈一個整體的一部分你的代碼可能會更具體,但是你可能誤解繼承的是如果一個類繼承另一個類,那麼子類將繼承超類中的相同字段,但不是字段中的值。例如:

class kid extends parent { 

,如果你有一個名爲父類染髮和

parent.haircolor = brown; 

然後領域的小子也有染髮的特性,但它不等於棕色。它等於null,直到你初始化它。