모두CBT

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는 오버라이딩되지 않고 각 클래스에 따로 존재한다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.