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