저는 Java에서 근본적인 문제로 생각하는 것을 이해하는 데 어려움을 겪고 있습니다. 다음은 3 번 줄이 클래스 캐스트 예외에 기댈 수있는 대답입니다. 원래 a1이 객체 A의 배열을 가리키고 있다는 것을 알 수 있습니다. 그러나 1 행에서는 객체 B의 배열을 가리 키지 않습니다. 따라서 a1이 a를 가리키고 있다면 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