Java에서 상속을 다루다 보면, this와 super를 이용해 현재 객체와 부모 객체의 멤버 변수를 구분할 수 있습니다.
아래 예제를 통해 정확히 이해해봅시다!
코드 예제
class Parent {
int x = 10;
String parentMethod() {
return "parent";
}
}
class Child extends Parent {
int x = 20;
String childMethod() {
return "child";
}
void printChild(int x) {
System.out.println("x : " + x);
System.out.println("this.x : " + this.x);
System.out.println("super.x : " + super.x);
}
}
public class superOverriding {
public static void main(String[] args) {
Child a = new Child();
a.printChild(50);
}
}
실행 결과
x : 50
this.x : 20
super.x : 10
각 변수 의미
- x (메서드 매개변수)
- printChild(int x)에서 선언된 지역 변수
- 메서드 내에서 가장 가까운 x를 참조
- 값: 50
- this.x
- 현재 객체(Child 객체)의 멤버 변수를 참조
- Child 클래스에 선언된 int x = 20이 사용됨
- 값: 20
- super.x
- 부모 객체(Parent)의 멤버 변수를 직접 참조
- Parent 클래스에 선언된 int x = 10이 사용됨
- 값: 10
핵심 정리
- 지역 변수 > 자식 멤버 > 부모 멤버 순으로 우선순위 적용
- this는 현재 객체
- super는 부모 객체
- 같은 이름의 멤버가 자식/부모에 모두 존재해도, this와 super로 명확히 구분 가능

'Java' 카테고리의 다른 글
| [Java] 상속의 정의 (0) | 2025.10.17 |
|---|---|
| [Java] Java spring에서 안전한 객체 복사와 불변 설계 패턴 (0) | 2025.10.17 |
| [Java] this()(생성자에서의 this 호출), this(참조변수로 자기 자신을 가리키는 경우) (0) | 2025.10.17 |
| [JAVA] 객체지향개념Ⅱ (0) | 2025.10.13 |
| [Java] 문자열 처리 성능비교 - String vs StringBuilder vs StringBuffer (0) | 2025.10.11 |