본문 바로가기
자격증/정보처리기사

[정보처리기사] 실기 24년 3회 JAVA 문제 11번 해설

by ewaterland 2025. 4. 19.

문제 11번. 출력 결과

public class Main{
  public static void main(String[] args){
    Base a =  new Derivate();
    Derivate b = new Derivate();
    
    System.out.print(a.getX() + a.x + b.getX() + b.x);
  }
}

class Base{
  int x = 3;
 
  int getX(){
     return x * 2; 
  }
}

class Derivate extends Base{
  int x = 7;
  
  int getX(){
     return x * 3;
  }
}

 

더보기
더보기

[ 답 ]

52

 

[ 풀이 ]

System.out.print(a.getX() + a.x + b.getX() + b.x);

이 부분을 하나씩 살펴보면

 

a.getX()

  • a의 실제 타입은 Derivate → 오버라이딩된 Derivate.getX() 호출됨
  • Derivate.getX()는 return x * 3;
  • 근데 여기서 x는 Derivate 클래스의 필드 (int x = 7)
  • 따라서: 7 * 3 = 21

a.x

  • a의 컴파일 타입은 Base
  • 필드는 오버라이딩되지 않음 (오버라이딩은 메서드에만 적용됨)
  • 따라서 Base의 x 필드를 참조 → 3

b.getX()

  • b는 Derivate 타입 → Derivate.getX() 호출됨
  • x = 7, 결과는 7 * 3 = 21

b.x

  • b는 Derivate 타입 → Derivate의 x는 7

 

요약

Base a = new Derivate(); 업캐스팅 (타입은 Base, 객체는 Derivate)
getX() 오버라이딩 → 실제 객체 기준 실행
x 필드 오버라이딩 되지 않음 → 참조 변수 타입 기준으로 결정
a.x Base의 x 참조 (=3)
b.x Derivate의 x 참조 (=7)
반응형