다음 Java 프로그램의 출력 결과는?class Foo { public… | [9급 지방직 컴퓨터일반] 17년 1회차 기출문제 상세 페이지
1[9급 지방직 컴퓨터일반] 17년 1회차
다음 Java 프로그램의 출력 결과는?class Foo {
public int a = 3;
public void addValue(int i) {
a = a + i;
System.out.println("Foo : "+ a + " " );
}
public void addFive() {
a += 5;
System.out.println("Foo : "+ a + " " );
}
}
class Bar extends Foo {
public int a = 8;
public void addValue(double i) {
a = a + (int)i;
System.out.println("Bar : "+ a + " " );
}
public void addFive() {
a += 5;
System.out.println("Bar : "+ a + " " );
}
}
public class Test {
public static void main(String [] args) {
Foo f = new Bar();
f.addValue(1);
f.addFive();
}
}
1
Foo : 4
Foo : 9
2
Bar : 9
Foo : 8
3
Foo : 4
Bar : 13
4
Bar : 9
Bar : 14
해설
출력은 Foo : 4와 Bar : 13이다.
Bar의 addValue(double)는 Foo의 addValue(int)와 매개변수 형이 달라 재정의가 아닌 오버로딩이다. 참조형이 Foo인 f.addValue(1)은 Foo의 addValue(int)를 호출해 Foo의 필드 a를 3 + 1 = 4로 만든다.
addFive()는 Bar가 재정의했으므로 실제 객체(Bar)의 메서드가 동적 바인딩으로 실행되고, Bar의 필드 a를 8 + 5 = 13으로 만든다.
- Foo : 4, Foo : 9는 addFive()가 재정의된 Bar의 메서드로 실행된다는 점을 놓쳤다.
- Bar : 9, Foo : 8은 addValue(1)이 Bar의 addValue(double)를 호출한다고 본 오류다.
- Bar : 9, Bar : 14도 addValue(1)을 Bar의 메서드로 잘못 연결한 결과다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.