25-1아래 Java 프로그램의 실행 시 출력값을 적으시오.class … | 2025년 정보처리기사실기 1회차 기출문제 상세 페이지
3
25-1
아래 Java 프로그램의 실행 시 출력값을 적으시오.
class Base {
static int acc = 1;
int w = 3;
Base() {
acc += w * 2;
step();
}
void step() {
acc -= 1;
}
}
class Derived extends Base {
int w = 5;
Derived() {
w -= 1;
acc += --w;
step();
}
@Override
void step() {
acc = acc * 2 + w;
}
}
public class Main {
public static void main(String[] args) {
new Derived();
System.out.println(Base.acc);
}
}해설
37
[해설]
new Derived()는 먼저 부모 생성자를 실행하고, 그다음 자식 필드 초기화와 자식 생성자 본문을 실행한다.
- Base(): acc = 1 + 3×2 = 7
- Base()의 step()은 오버라이딩된 Derived.step()이 호출된다. 이때 Derived의 w는 아직 초기화 전이라 0 → acc = 7×2 + 0 = 14
- Derived 필드 초기화: w = 5, 본문 w -= 1 → 4
- acc += --w: w가 3이 된 뒤 더해져 acc = 17
- step(): acc = 17×2 + 3 = 37
static 변수 acc는 두 클래스가 공유하므로 최종 출력은 37이다. 필드 w는 오버라이딩되지 않고 각 클래스에 따로 존재한다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.