這個問題在這里已經有了答案: 為什么不能參考子類物件參考父類物件? (14 個回答) 7 天前關閉。
我是 Java 的初學者,我正在玩一些 Java 代碼。但是,當我將父類物件的參考分配給子類變數時,我無法弄清楚為什么會出現運行時錯誤。我也做過明確的型別轉換。有什么辦法可以解決嗎?
class Employee{
int e;//creating empty class
}
class Teacher extends Employee{
int f;//creating empty class
}
class run{
public static void main(String args[]){
Employee e;
e= new Employee();
Teacher t;
t= (Teacher)e; //giving runtime error
}
}
uj5u.com熱心網友回復:
我們可以將子類物件分配給父類參考變數,但不能將父類物件分配給子類參考變數。
uj5u.com熱心網友回復:
ATeacher是Employee,但不是每個Employee都是Teacher。
所以,一個Employee變數可以保存型別Employee本身的物件,以及它的子類,比如Teacher,Worker或者其他什么。但是如果你有一個Teacher變數,它只能保存Teacher實體(和 的子類Teacher),而不能保存Employee或Worker實體。
和
t = (Teacher) e;
你有e,一個Employee變數。通常,這e不“適合”Teacher變數,僅在Employee變數e包含Employee子類實體(即Teacher實體)的可能情況下。
因此,如果沒有強制轉換,編譯器將禁止賦值。撰寫演員表,您作為開發人員告訴編譯器
嘿,我知道通常不允許分配,但我保證,在運行時,實體
e將是Teacher. 所以,盡管有風險,請編譯這行代碼,如果我的承諾不成立,請在運行時給我一個例外。
這就是發生的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/326516.html
