메서드 오버라이딩 뿐만 아니라 멤버변수도 오버라이딩이 가능하다.
즉, 메서드도 덮어쓸 수 있지만, 멤버변수도 덮어쓸 수 있다.
레퍼런스 super
- 슈퍼클래스의 멤버에 접근하기 위한 키워드(=레퍼런스 변수)
- 레퍼런스 this 와 동일하나 슈퍼클래스 인스턴스 주소가 저장되어 있는 점이 다르다.
=레퍼런스 this는 자신의 인스턴스 주소가 저장되어 있음
- 주로 오버라이딩에 의해 은닉된 변수 또는 메서드에 접근해야할 경우 사용
(자신의 멤버 : this.XXX , 부모의 멤버 : super.XXX)
- 슈퍼클래스와 서브클래스, 서브클래스의 메서드 내에 동일한 이름의 변수가 존재할 때 탐색 과정
- 현재 호출된 곳을 기준으로 가장 가까운 곳부터 점차 탐색 범위를 넓혀가면서 탐색
(ex. 로컬변수 -> 멤버변수 -> 슈퍼클래스의 멤버변수)
- 최종적으로 Object 클래스까지 거슬러 올라가면서 탐색하여 없을 경우 오류 발생!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Parent {
String x= "Parent";
}
class Child extends Parent {
String x ="Child";
public void method() {
String x ="Method";
System.out.println("x = " + x) // 로컬 변수 x
// 만약, 로컬변수 x를 선언하지 않으면 this.x와 동일하게 수행
System.out.println("this.x = " + this.x);
// 만약, Child 클래스의 멤버변수 x를 선언하지 않으면 super.x와 동일
System.out.println("super.x = " + super.x);
// 만약, Parent 클래스의 멤버변수 x를 선언하지 않으면 오류 발생! (Object 에 없기 때문)
}
}
|
cs |
'Language > Java' 카테고리의 다른 글
레퍼런스(참조형) 형변환 (0) | 2020.06.05 |
---|---|
생성자 super() (0) | 2020.06.05 |
접근제한자 (0) | 2020.06.05 |
메서드 오버라이딩 (Method Overriding) = 메서드 재정의 (0) | 2020.06.05 |
상속에서의 생성자 (0) | 2020.06.04 |