코딩일기/자격증

[정보처리기사] [Java] 상속과 super 키워드 실행 순서 | 2024년 1회 정보처리기사 실기 기출문제

jhy_2023 2025. 4. 2. 21:47
728x90
반응형

2024년 1회 정보처리기사 실기 기출문제

문제

다음 JAVA 코드의 실행 순서를 중복 번호 없이 빈칸에 작성하시오.
실행 순서 : 5 → ( ) → ( ) → ( ) → ( ) → ( )

class Parent {
    int x, y;

    Parent(int x, int y) { (_1_)
        this.x = x;
        this.y = y;
    }

    int getT() { (_2_)
        return x * y;
    }
}

class Child extends Parent {
    int x;

    Child(int x) { (_3_)
        super(x + 1, x);
        this.x = x;
    }

    int getT(int n) { (_4_)
        return super.getT() + n;
    }
}

class Main {
    public static void main(String[] args) { (_5_)
        Parent parent = new Child(3); (_6_)
        System.out.println(parent.getT()); (_7_)
    }
}

정답

5 → 6 → 3 → 1 → 7 → 2
반응형

해설

class Parent {
    int x, y;

    Parent(int x, int y) { (_1_) // 생성자
        this.x = x;
        this.y = y;
    }

    int getT() { (_2_) // 메소드
        return x * y;
    }
}

class Child extends Parent {
    int x;

    Child(int x) { (_3_) // 생성자
        super(x + 1, x);
        this.x = x;
    }

    int getT(int n) { (_4_) // 메소드
        return super.getT() + n;
    }
}

class Main {
    public static void main(String[] args) { (_5_) // 메인
        Parent parent = new Child(3); (_6_)
        System.out.println(parent.getT()); (_7_)
    }
}

1️⃣ main 메서드 실행 (_5_)

public static void main(String[] args) { (_5_)

프로그램이 시작되면서 main 메서드가 실행됩니다.

2️⃣ Child 객체 생성 (_6_)

Parent parent = new Child(3);
  • Child 클래스의 생성자가 호출됩니다.
  • 매개변수 3이 Child(int x) 생성자의 x에 전달됩니다. 
  • Parent 타입의 변수 parent가 자식 클래스의 객체 Child(3)를 참조합니다.
    즉, parent 변수는 Parent 타입이지만, 실제로 참조하는 객체는 Child입니다.
    따라서 부모 클래스의 기능만 사용할 수 있지만, 오버라이딩된 메서드는 Child의 것이 실행됩니다.

3️⃣ Child 생성자 실행 (_3_)

Child(int x) {
    super(x + 1, x); // Parent 생성자 호출
    this.x = x;
}
  • 6번 코드( new Child(3) )가 실행되어 매개변수 3이 Child(int x)의 x로 전달됩니다.
  • super()는 부모 클래스(Parent)의 생성자를 호출하는 코드입니다. 여기서는 super(x + 1, x);가 실행되면서 Parent의 생성자가 호출됩니다.
    •  x + 1 → 3 + 1 = 4
    • x → 3
    • super(4, 3);가 실행되며 Parent 클래스의 x = 4, y = 3으로 초기화됩니다.
      Parent(int x, int y) {
          this.x = x;  // x = 4
          this.y = y;  // y = 3
      }
  • 여기서 this.x는 Child 클래스의 인스턴스 변수 x 를 의미합니다. 즉, this.x = x;를 통해 Child 클래스의 x에 전달된 매개변수 값을 저장합니다.
  • 현재 상태:
    • Child 클래스의 x → 3
    • Parent 클래스의 x → 4
    • Parent 클래스의 y → 3
728x90

4️⃣ Parent 생성자 실행 (_1_)

Parent(int x, int y) {
    this.x = x;
    this.y = y;
}
  • 3번 코드가 실행되어, super(4, 3);이 실행되면서 Parent(4, 3) 생성자가 호출됨
  • this.x는 Parent 클래스의 멤버 변수 x 를 의미합니다. 여기서 this는 현재 객체(Parent 객체)를 가리킵니다. 즉, 전달된 매개변수 x 값을 Parent 클래스의 x 변수에 저장합니다.
  • 위와 같은 방식으로 this.y = y;를 실행하면서 매개변수 y 값을 Parent 클래스의 멤버 변수 y에 저장합니다.
  • 현재 상태:
    • Parent 클래스의 x = 4
    • Parent 클래스의 y = 3

5️⃣ 메서드 호출 (_7_)

System.out.println(parent.getT());
  • parent.getT()의 결과 값을 계산한 후 콘솔에 출력하는 역할을 합니다.
  • parent는 Parent 타입으로 선언되었기 때문에 Parent 클래스의 getT() 메서드(②)가 호출됩니다.

6️⃣ getT 메서드 실행 (_2_)

int getT() {
    return x * y;
}
  • 현재 parent 객체는 new Child(3);을 통해 생성되었습니다. 이 과정에서 Parent의 x와 y 값은 다음과 같이 초기화되었습니다.
    • Parent(int x, int y) {  // super(x+1, x) → super(4, 3)
          this.x = x;  // x = 4
          this.y = y;  // y = 3
      }
  • 따라서 getT() 실행 시, 4 * 3 = 12 즉, 12가 반환됩니다.
  • 최종적으로, System.out.println(12);이므로 12가 출력됩니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형