父類宣告子類例項化物件詳解
阿新 • • 發佈:2018-11-10
測試程式碼:
public class Employee {
public String name;
public String getType(){
return "Employee";
}
}
public class Manager extends Employee{
private int money;
public String getType(){
return "Manager";
}
}
public static void main(String[] args) { // TODO Auto-generated method stub Employee A=new Manager(); A.name="Tom"; //A.money=2;//報錯 String Type=A.getType(); System.out.println(Type);//Manager }
通過測試我們發現以下幾點:
- A物件可以使用從父類繼承下來的非public屬性
- A物件無法使用Manager子類新增的money屬性
- A物件呼叫的方法是子類的方法
總結:父類宣告子類例項化產生的物件使用的是子類從父類繼承的方法和屬性。
原理:
Employee A=new Manager();
實際是父類控制代碼指向子類物件空間,所以使用的屬性和方法都是子類物件所有的。而因為是父類的控制代碼指向的只能是父類所擁有的屬性和方法,所以指向的屬性和方法實則又必須是是從父類繼承而來的。
注意:
不能用子類宣告父類例項化物件!
因為子類的控制代碼指向父類空間時,有可能有部分子類的屬性方法是父類所沒有的,因此,子類控制代碼無法指向有效的空間,編譯無法通過。