글
관련 이론 및 문법
(static 참고)
http://kkikkodev.tistory.com/124
(final 참고)
http://kkikkodev.tistory.com/374
(인스턴스 변수로 접근할 수 있는 멤버의 범위 참고)
http://kkikkodev.tistory.com/357
문제 의도
주어진 코드를 컴파일한 후, 실행한 결과를 고르는 문제입니다.
답안
D
풀이 방법
코드를 살펴보면, Base, Sub 클래스로 구성되어 있는 것을 볼 수 있습니다. Base 클래스에는, public static final String 형 상수 FOO 가 있고, (값은 "foo") Sub 클래스는 Base 클래스를 상속하고 있고, public static final String 형 상수 FOO 가 있습니다. (값은 "bar")
Base 클래스의 main 메소드가 실행되면, 먼저, Base 형 객체를 만들어, b 변수가 가리키게 하고, Sub 형 객체를 만들어, s 변수가 가리키게 합니다. Base.FOO 를 출력하면, Base 클래스의 static 상수인 FOO 가 출력되므로, "foo" 가 출력됩니다. 두 번째로, Sub.FOO 를 출력하면, Sub 클래스의 static 상수인 FOO 가 출력되므로, "bar" 가 출력됩니다. static 상수의 접근은, 접근시에 사용하는 클래스명에 의존적이기 때문입니다. 세 번째로, b.FOO 를 출력하면, b 는 Base 형 인스턴스 변수이므로, Base 클래스의 static 상수인 FOO 가 출력되므로 "foo" 가 출력됩니다. (static 상수의 접근을 클래스명이 아닌, 인스턴스명으로도 할 수는 있지만, 권장되는 방법은 아닙니다.) 네 번째로, s.FOO 를 출력하면, s 는 Sub 형 인스턴스 변수이므로, Sub 클래스의 static 상수인 FOO 가 출력되므로 "bar" 가 출력됩니다. 마지막으로, ((Base)s).FOO 를 출력하면, 원래 s 는 Sub 형 인스턴스 변수이었지만, Base 형으로 강제 형변환하면, Sub 형이 Base 형으로 일시적으로 변하게 됩니다. 그 후에, FOO 상수를 접근하면, Base 클래스의 FOO 가 출력되게 되어 "foo" 가 출력되게 됩니다.
결과적으로 "foobarfoobarfoo" 가 출력되므로, 답안은 D 가 됩니다.
'4.1) OCJP > 1Z0-851 / 2012-08-28' 카테고리의 다른 글
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 60 번 (16) | 2016.11.20 |
---|---|
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 58 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 57 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 56 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 55 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 54 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 53 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 52 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 51 번 (0) | 2016.11.20 |
OCJP (1Z0-851 / 2012-08-28 / Exam C) - 50 번 (0) | 2016.11.20 |
RECENT COMMENT