我很努力去理解我認爲Java中的一個基本問題。 下面的答案是第3行傾向於類拋出異常。我可以看到最初的a1指向對象A的數組。但是在第1行沒有設置指向對象b的數組?因此,如果a1指向一個應該現在不是也指向b?從Enthuware引用和鑄造
說明: -
程序將在該行拋出java.lang.ClassCastException標記3運行時。
第1行將在編譯期間被允許,因爲賦值是從子類引用到超類引用完成的。 因爲超類引用被分配給子類引用變量,所以需要在行// 2中進行強制轉換。並且這在運行時工作,因爲a引用的對象實際上是一個B數組。 現在,行// 3處的轉換告訴編譯器不要擔心,我是一名優秀的程序員,我知道我是什麼做和超級類引用(a1)引用的對象實際上是在運行時的類B。所以沒有編譯時錯誤。但在運行時,這種失敗,因爲實際的對象不是B的陣列,但A.
public static void main(String args[]) {
A[] a, a1;
B[] b;
a = new A[10];
a1 = a;
b = new B[20];
a = b; //line 1
b = (B[]) a; //line 2
b = (B[]) a1; //line 3
}
}
class A {
}
class B extends A {}
http://stackoverflow.com/questions/ 1750106/how-can-i-use-pointers-in-java – chancea 2015-02-06 16:16:44