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;
  }
}
- Base a = new Derivate();
- 참조 타입(Base), 실제 객체 타입(Derivate)
 - a.getX() → 오버라이딩된 Derivate의 메서드 실행 → x * 3
 - 여기서 쓰는 x는 Derivate의 x 아님 → 메서드 안에서 this.x는 자기 클래스에 있는 멤버부터 찾음
 - Derivate에 int x = 7; 있어서 7 * 3 = 21
 - a.x → 변수는 참조 타입(Base) 기준으로 가져옴 → 3
 
 
- Derivate b = new Derivate();
- 참조 타입도 Derivate, 객체 타입도 Derivate
 - b.getX() → Derivate의 메서드 → 7 * 3 = 21
 - b.x → 참조 타입이 Derivate니까 그대로 7
 
 
- 전체 합치면
 
a.getX() + a.x + b.getX() + b.x
= 24 + 28
= 52
📌 출력 결과
52
📌 정리
- 메서드는 오버라이딩 → 실행 시점에 실제 객체 타입 기준
 - 변수는 오버라이딩 불가능 → 선언된 참조 타입 기준
 - 그래서 getX()에서는 Derivate꺼 실행되지만, x 변수는 Base/Derivate 타입 차이남
 
한줄평
변수는 참조타입, 함수는 객체 타입
출처
'정보처리기사' 카테고리의 다른 글
| 2024년 정보처리기사 실기 3회 12번 문제 공부 및 풀이 (0) | 2025.10.21 | 
|---|---|
| 2024년 정보처리기사 실기 3회 10번 문제 공부 및 풀이 (0) | 2025.10.02 | 
| 2024년 정보처리기사 실기 3회 7번 문제 공부 및 풀이 (0) | 2025.09.27 | 
| 2024년 정보처리기사 실기 3회 2번 문제 공부 및 풀이 (0) | 2025.09.27 | 
| 2024년 정보처리기사 실기 2회 18번 문제 공부 및 풀이 (0) | 2025.09.25 |