4.1) OCJP/1Z0-851 / 2012-08-28

OCJP (1Z0-851 / 2012-08-28 / Exam B) - 3 번

kkikkodev 2015. 8. 2. 00:58



관련 이론 및 문법

(상속관계에서 인스턴스의 대입 참고)

http://kkikkodev.tistory.com/129


문제 의도

주어진 소스코드의 다음에 추가할 코드 중, 정상적으로 컴파일되는 보기를 3 개 고르는 문제입니다.


답안

A, E, F


풀이 방법

주어진 소스코드를 보면, 3 개의 클래스를 정의하고 있습니다. ClassA 를 정의하고, ClassB 를 정의하면서 ClassA 를 상속하고, ClassC 를 정의하면서, ClassA 를 상속하고 있습니다.


그리고, 객체를 p0, p1, p2, p3, p4 의 이름으로 생성하고 있습니다. p0 의 자료형은 ClassA 이고, 실제 객체는 ClassA 형입니다. p1 의 자료형은 ClassB 이고, 실제 객체는 ClassB 형입니다. p2 의 자료형은 ClassC 이고, 실제 객체는 ClassC 형입니다. 여기까지는 인스턴스의 자료형과 실제 객체의 자료형이 동일합니다. 


p3 의 자료형은 ClassA 이지만, 실제 객체는 ClassB 형입니다. p4 의 자료형은 ClassA 이지만, 실제 객체는 ClassC 형입니다. 선언된 인스턴스의 자료형이 부모형이고, 실제 객체의 자료형이 자식이기 때문에 이는 정상적인 코드입니다.


보기 A 를 보면, p0 에 p1 을 대입하고 있습니다. p0 은 선언된 인스턴스의 자료형이 ClassA 형이고, p1 은 선언된 인스턴스의 자료형이 ClassB 인데, 이는, 부모에 자식을 대입하므로, 문제가 없는 코드이므로 답안 후보가 됩니다.


보기 B 를 보면, p1 에 p2 를 대입하고 있습니다. p1 은 선언된 인스턴스의 자료형이 ClassB 형이고, p2 는 선언된 인스턴스의 자료형이 ClassC 인데, 이는, ClassB 형의 변수에 ClassC 를 대입하므로 (서로 관련없는 클래스형이라서) 컴파일 에러가 나므로, 답안 후보에서 제외합니다.


보기 C 를 보면, p2 에 p4 를 대입하고 있습니다. p2 는 선언된 인스턴스의 자료형이 ClassC 형이고, p4 는 선언된 인스턴스의 자료형이 ClassA 인데, 이는, 자식에 부모를 대입하는 것이라서, 컴파일 에러가 나므로 답안 후보에서 제외합니다.


보기 D 를 보면, p2 에 p1 을 ClassC 로 형변환하여 대입하고 있습니다. p2 는 선언된 인스턴스의 자료형이 ClassC 형이고, p1 은 선언된 인스턴스의 자료형이 ClassB 인데, 이를 ClassC 형으로 형변환하고 있습니다. ClassB 와 ClassC 는 전혀 관련이 없는 클래스라서, 컴파일 에러가 발생하여, 답안 후보에서 제외합니다.


보기 E 를 보면, p1 에 p3 를 ClassB 로 형변환하여 대입하고 있습니다. p1 은 선언된 인스턴스의 자료형이 ClassB 형이고, p3 는 선언된 인스턴스의 자료형이 ClassA 인데, 이를 ClassB 형으로 형변환하고 있습니다. 이는, 부모에서 자식으로 강제형변환하는 것이므로 문제가 없습니다. 그리고 ClassB 형으로 변환된 객체를 다시 ClassB 형에 대입하므로 컴파일이 정상적으로 되고, 이는 답안 후보가 됩니다.


보기 F 를 보면, p2 에 p4 를 ClassC 로 형변환하여 대입하고 있습니다. p2 는 선언된 인스턴스의 자료형이 ClassC 형이고, p4 는 선언된 인스턴스의 자료형이 ClassA 인데, 이를 ClassC 형으로 형변환하고 있습니다. 이는, 부모에서 자식으로 강제형변환하는 것이므로 문제가 없습니다. 그리고 ClassC 형으로 변환된 객체를 다시 ClassC 형에 대입하므로 컴파일이 정상적으로 되고, 이는 답안 후보가 됩니다.


따라서 답안은 A, E, F 가 됩니다.