關於繼承的特殊注意事項:
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)