java繼承中關於繼承的特殊注意事項:引用類型爲父類,但實例化爲子類對象時調用變量或方法的結果分析

關於繼承的特殊注意事項:

package defaul;

class f{
    
    int x,y;
    f(int x,int y){
        
        this.x=x;
        this.y=y;
        
    }
    int num = 12;
    void eat(){
        System.out.println("父類裏的喫方法");
        
    }

}

class z extends f{
     z(int x, int y) {
        super(x, y);
        // TODO Auto-generated constructor stub
    }
    int num = 15;
     void eat(){
            System.out.println("子類裏的喫方法");
        }
    
    }

public class Day_17 {

    public static void main(String args[]) {
        f f1=new z(2,3);
        System.out.println(f1.x);
    System.out.println(f1.num);//調用變量的時候,調用的是父類裏的變量
    f1.eat();//調用方法的時候,調用的是子類的方法
    
    }
}
 

以上代碼 的運行結果是:

當在實例化對象的時候,引用類型爲分類,實例化爲子類對象的時候,

f f1=new z(2,3);

調用變量的時候,調用的是父類裏的變量

而調用的方法卻是子類自己的方法

原因可以做如下理解:

子類對父類可做擴展和特殊化

創建新的成員:變量和方法

【1】重新定義父類中已有的變量:變量隱藏

子類重新定義從父類繼承的完全相同的變量稱爲變量隱藏。

變量隱藏後變量的處理 :當子類執行繼承自父類的操作時,處理的是父類的變量 當子類執行自己定義的方法時,操作的是自己的變量,把父類的變量“隱藏”起來

【2】重新定義父類中已有的方法:方法重寫(覆蓋)(overwrite 或override)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章