第七周動手動腦(2018.10.29-11.4)
阿新 • • 發佈:2018-11-08
its 多態 nds 引用 技術分享 並且 圖片 構造 函數
動手動腦1:
運行 TestInherits.java 示例,觀察輸出,註意總結父類與子類之間構造方法的調用關系修改Parent構造方法的代碼,顯式調用GrandParent的另一個構造函數,註意這句調用代碼是否是第一句,影響重大!
運行截圖:
結論:通過 super 調用基類構造方法,必須是子類構造方法中的第一個語句。
動手動腦2:
請自行編寫代碼測試以下特性:
在子類中,若要調用父類中被覆蓋的方法,可以使用super關鍵字。
package ceshi; class Animal { public int age=10; public String name; public void eat(){ System.out.println("吃東西"); } public Animal(int age){ this.age=age; System.out.println("執行了構造方法"); } } class Dog extends Animal{ public int age=20; public void eat(){ System.out.println("狗能吃骨頭"); } public Dog(int age){ super(age); System.out.println("Dog構造方法執行了"); } } package ceshi; public class Test { public static void main(String[] args){ Animal a=new Animal(10); a.eat(); Dog b=new Dog(20); b.eat(); } }
截圖:
動手動腦3:
答:
1.
2.
(1)子類對象可以賦值給父類的對象。父類進行子類強制轉換可以賦值給子類的對象。
(2)子類能覆蓋父類,但是父類中的變量的值是不改變的,訪問父類中的變量時可用super來訪問,反之則一直被子類覆蓋。父類被覆蓋時,對父類中的變量進行操作時,父類中的變量改變,但輸出時仍輸出覆蓋父類的子類的變量。
(3)(child)Parent.myValue++,這時改變的將是覆蓋父類的子類。
3.
當子類與父類擁有一樣的方法,並且讓一個父類變量引用一個子類對象時,到底調用哪個方法,由對象自己的“真實”類型所決定,這就是說:對象是子類型的,它就調用子類型的方法,是父類型的,它就調用父類型的方法。
這個特性實際上就是面向對象“多態”特性的具體表現。
如果子類與父類有相同的字段,則子類中的字段會代替或隱藏父類的字段,子類方法中訪問的是子類中的字段(而不是父類中的字段)。如果子類方法確實想訪問父類中被隱藏的同名字段,可以用super關鍵字來訪問它。
如果子類被當作父類使用,則通過子類訪問的字段是父類的!
第七周動手動腦(2018.10.29-11.4)