QUESTION 34
Given:
class Foo {
public int a = 3;
public void addFive() { a += 5; System.out.print("f "); }
}
class Bar extends Foo {
public int a = 8;
public void addFive() { this.a += 5; System.out.print("b " ); }
}
Invoked with:
Foo f = new Bar();
f.addFive();
System.out.println(f.a);
What is the result?
A. b 3
B. b 8
C. b 13
D. f 3
E. f 8
F. f 13
G. Compilation fails.
H. An exception is thrown at runtime.
Correct Answer: A
해설
Foo f = new Bar();
// Foo 클래스의 f 변수 안에 Bar 객체를 생성하여 넣음(Bar클래스는 Foo클래스를 상속)
f.addFive();
// Foo클래스의 addFive 메소드 이동하였으나 Bar 클래스의 addFive 메소드가 오버라이딩 하고 있으므로 Foo클래스의 메소드 실행하지 않고 Bar 클래스의 메소드 실행
// Bar클래스의 addFive() 메소드 실행 this.a += 5; 이므로 Bar클래스의 a 변수값은 13이 된다.
// System.out.print("b " ); 출력
System.out.println(f.a);
// 변수는 오버라이딩개념이 없으므로 Foo클래스의 a변수의 값 3 출력
'DEV > ocjp' 카테고리의 다른 글
EaxmA QUESTION 35 (0) | 2015.02.10 |
---|---|
EaxmA QUESTION 33 (0) | 2015.02.10 |
EaxmA QUESTION 23 (0) | 2015.02.10 |