1. 程式人生 > >第七周動手動腦(2018.10.29-11.4)

第七周動手動腦(2018.10.29-11.4)

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)