Java 프로그램의 실행 결과로 옳은 것은?public class B … | [계리직 컴퓨터일반] 19년 1회차 기출문제 상세 페이지
1[계리직 컴퓨터일반] 19년 1회차
Java 프로그램의 실행 결과로 옳은 것은?public class B extends A {
int a = 20;
public B() {
System.out.print("다");
}
public B(int x) {
System.out.print("라");
}
}public class A {
int a = 10;
public A() {
System.out.print("가");
}
public A(int x) {
System.out.print("나");
}
public static void main(String[] a) {
B b1 = new B();
A b2 = new B(1);
System.out.print(b1.a + b2.a);
}
}
1
다라30
2
다라40
3
가다가라30
4
가다가라40
해설
실행 결과는 가다가라30이다.
하위 클래스 생성자는 첫 줄에서 상위 클래스의 기본 생성자 super()를 암묵적으로 호출한다. new B()는 "가" 다음 "다"를, new B(1)도 A(int)가 아닌 A()를 먼저 호출해 "가" 다음 "라"를 출력한다.
필드는 재정의되지 않고 참조 변수의 선언 타입으로 결정된다. b1(B형).a는 20, b2(A형).a는 10이므로 합은 30이다.
- 다라30: 상위 클래스 생성자 A()가 먼저 실행되는 과정을 빠뜨린 결과다.
- 다라40: 생성자 호출 순서와 필드 결정 규칙을 모두 잘못 적용한 결과다.
- 가다가라40: b2.a를 실제 객체 B의 필드 20으로 본 결과로, 필드는 다형성이 적용되지 않는다.
오류나 개정된 내용이 보이면 알려주세요