一個(gè)困惑我?guī)滋觳沤鉀Q的看似簡(jiǎn)單的問題,明白了對(duì)多態(tài)理解更深了一點(diǎn)
父類: public?class?Animal?{ ?String?name="動(dòng)物";? } 子類: public?class?Dog?extends?Animal{ ?String?name="外狗"; ? ?public?Dog(){??? ??name="內(nèi)狗"; ?} } 測(cè)試類: public?class?TestAnimal?{ ?public?static?void?main(String[]?args)?{ ??Animal?dog=new?Dog(); ??System.out.println(dog.name); ?} } 問題: 測(cè)試類結(jié)果為: 動(dòng)物 但是當(dāng)我注釋掉?子類String?name="外狗";這行代碼 測(cè)試類結(jié)果為: 內(nèi)狗 為什么?
2016-12-14
如果你把自類中String name改成String name1,運(yùn)行結(jié)果會(huì)是 內(nèi)狗。
2016-12-31
Animal?dog=new?Dog();
System.out.println(dog.name);
//Dog調(diào)用的是父類中的name屬性或著(子類中繼承或重寫的父類屬性),
String?name="外狗";?//?這是定義了一個(gè)新的變量name,不能被父類引用
2016-12-25
錯(cuò)了? 沒弄清楚
2016-12-25
初始化順序 父類 》》子類?????? 父類對(duì)象》子類對(duì)象》構(gòu)造方法
2016-12-15
????? 正如我采納答案所說,我在子類定義了一個(gè)String name="外狗",明確了這個(gè)變量是子類的變量,它會(huì)根據(jù)多態(tài)的規(guī)則,子類同名屬性并不會(huì)覆蓋父類屬性,而是都存在的(存在哪里?內(nèi)存這塊我還不清楚),所以子類構(gòu)造函數(shù)初始化了子類的屬性name為“內(nèi)狗”,而Anima dog=new Dog(),? dog還是用的父類的屬性name="動(dòng)物"
???? 而我沒有明確定義String name=“外狗”這句,子類構(gòu)造函數(shù)默認(rèn)用的name是父類的name(很容易就以為初始化的是子類的屬性name), name="內(nèi)狗"這行等同于super.name="內(nèi)狗"。
????想更清楚的話,可以去看看這個(gè)博客 http://blog.csdn.net/l_b_h_w/article/details/52665231
2016-12-14
對(duì)象和引用這部分我弄的有點(diǎn)不清楚 ,請(qǐng)?jiān)斀?/p>
2016-12-14
為什么我寫了一個(gè)結(jié)果還是沒變呢?
2016-12-14
這是為什么呢。。。