본문 바로가기
Language/Java

레퍼런스 super

by 태윤2 2020. 6. 5.

메서드 오버라이딩 뿐만 아니라 멤버변수도 오버라이딩이 가능하다.

즉, 메서드도 덮어쓸 수 있지만, 멤버변수도 덮어쓸 수 있다.

 

레퍼런스 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