2013년 3월 29일 금요일

OCJP 문제풀이 - Question 37


QUESTION 37
Given:
interface Foo {}
class Alpha implements Foo {}
class Beta extends Alpha {}
class Delta extends Beta {
  public static void main( String[] args ) {
    Beta x = new Beta();
    // insert code here 16
  }
}
Which code, inserted at line 16, will cause a java.lang.ClassCastException?

A. Alpha a = x;
B. Foo f = (Delta)x;
C. Foo f = (Alpha)x;
D. Beta b = (Beta)(Alpha)x;


Answer: B
Section: All

Explanation/Reference:

ClassCastException 은 형변환을 잘 못 했을때 나는 Exception이다.

A,C는 부모 class 에 자식 class를 넣은 형태인데, 자식 class는 부모 class로 형변환이 가능하므로 정상적으로 실행된다.

D는 부모로 형변환한 상태라도 다시 자신의 클래스로 형변환 할 수 있다.

B는 부모클래스를 자식클래스로 형변환했으므로 ClassCaseException이 발생한다.