글
관련 이론 및 문법
(접근 제어 지시자 참고)
http://kkikkodev.tistory.com/96
(this VS super 참고)
http://kkikkodev.tistory.com/95
문제 의도
주어진 소스코드와 함께 보기처럼 코드를 변경하였을 때, 컴파일이 정상적으로 되는 경우를 고르는 문제입니다.
답안
C, D
풀이 방법
먼저, 아무 소스코드도 변경하지 않은 상태로, 13 라인에서 에러가 나는 것을 볼 수 있습니다. 그 이유는, super() 문이 눈에 보이지는 않지만, this.a = 5; 문장 전에 삽입되어 있는데, 이는, 부모 클래스인 Super 의 기본 생성자를 호출하는 문장입니다. 하지만, 현재 Super 클래스에는 매개변수 생성자만 정의되어 있고, 기본 생성자는 없기 때문에, 에러가 나는 것입니다.
보기 A 와 B 를 살펴보면, 2 라인의 a 변수를 private 에서 public 혹은 protected 로 변경하고 있습니다. 하지만, 부모 클래스의 멤버 변수를 public 혹은 protected 로 변경한다고 해도, 13 라인에서 super() 를 여전히 호출하고 있기 때문에 에러가 납니다. (부모 클래스에 기본 생성자가 없어서)
보기 C 는, 13 라인을 this(5) 로 변경하고 있습니다. 이는, 현재 클래스인 Sub 클래스의 int 형 변수를 매개변수로 받는 또 다른 생성자를 호출하는 것입니다. (12 라인에 정의되어 있는 생성자) 따라서, 아무 문제 없이 돌아갑니다.
보기 D 는, 13 라인을 super(5) 로 변경하고 있습니다. 이것은, 부모 클래스인 Super 클래스의 3 라인의 매개변수 생성자를 호출하는 것이므로 문제가 없이 돌아갑니다.
보기 E 는, 13 라인을 super(a) 로 변경하고 있는데, 일단, Sub 의 생성자 내에 지역변수로 선언된 a 변수 혹은 매개변수로 선언된 a 변수가 없고, Sub 클래스의 멤버 변수로도 a 변수가 없고, 마지막으로, Super 클래스의 멤버 변수인 a 는 private 으로 선언되어 있으므로, 자식 클래스인 Sub 클래스에서도 접근할 수가 없는 상태입니다. 따라서, 에러가 납니다.
결론적으로, 답안은, 에러가 안나는 보기인, C 와 D 가 됩니다.
'4.1) OCJP > 1Z0-851 / 2012-08-28' 카테고리의 다른 글
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 20 번 (0) | 2015.07.13 |
---|---|
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 19 번 (0) | 2015.07.13 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 18 번 (0) | 2015.07.13 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 17 번 (0) | 2015.07.08 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 16 번 (0) | 2015.07.08 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 14 번 (0) | 2015.07.08 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 13 번 (0) | 2015.07.08 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 12 번 (0) | 2015.07.08 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 11 번 (0) | 2015.07.08 |
OCJP (1Z0-851 / 2012-08-28 / Exam A) - 10 번 (0) | 2015.07.08 |
RECENT COMMENT