我有這個練習:public class TestClass{ public static void main(String args[]){ A[] a, a1; B[] b; a = new A[10]; a1 = a; b = new B[20]; a = b; // 1 b = (B[]) a; // 2 b = (B[]) a1; // 3 } } class A { } class B extends A { } 在我看來,當我寫:a=b 時,我正在為 b 中的對象分配另一個引用 (a)。實際上,b 中的對象有兩個引用(a 和 b)。但是,對于繼承規則,子類也是父類類型,但父類不是子類類型。如何將超類引用 (a) 分配給子類類型 (b)?這也適用于后續分配。在我看來,如果我這樣寫:b=a,代碼將毫無問題地編譯,但是對于賦值 a=b,應該會出現編譯錯誤。為什么這個分配是正確的?
1 回答

翻過高山走不出你
TA貢獻1875條經驗 獲得超3個贊
假設 A 類是 Animal 類,B 類是 Dog 類。您可以創建一種動物,即狗 (a = b),因為狗是動物(子類)。但這并不適用于相反的方式 (b = a),因為動物可以不僅僅是狗,例如貓,所以你不能將貓指定為狗。因此,要做到這一點,您必須明確地將 Animal 轉換為 Dog (b = (Dog) a)。
添加回答
舉報
0/150
提交
取消