Home super 예약어는 부모 객체를 가르킨다
Post
Cancel

super 예약어는 부모 객체를 가르킨다

super 예약어는 부모 객체를 가르킨다고 하는데 JVM의 메모리 영역에서 상속 클래스가 할당되는 과정을 보면서 알아가 보자.


출처 : https://velog.io/@cham/백기선님자바스터디-6주차-상속

위 그림을 보면 자식클래스 객체(Iphone)가 생성되면서 이에 관련된 데이터는 Heap 영역에 저장되고 참조변수(iphone)Stack 영역에 저장된다.

그런데 자식클래스 객체의 생성자에는 super() 라는 코드가 자동으로 추가된다고 했다. 이 super()은 부모 클래스의 생성자를 의미하며 자식 클래스의 객체가 생성되는 과정에서 부모 클래스의 객체(CellPhone)Heap 영역에 생성된다고 보면 된다.



출처 : https://stellan.tistory.com/entry/Java-%EC%83%81%EC%86%8D

두 객체의 연결은 super라는 이름으로 선언되는 참조변수에 의해 연결된다. super는 자식 객체에 선언되며 이 변수에 담긴 값은 부모 객체의 메모리 주소이다.

그러므로 자식 클래스 내에서 super.변수명 또는 super.메소드명으로 코드를 작성하면, 부모 객체에 선언되어 있는 변수명과 메소드명을 호출할 수 있다.


예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class PrintInfo{
    public static void main(String[] args){
        Child child = new Child(); // 자식 클래스 생성

        child.printParentAge(); // 부모클래스의 변수를 출력
        child.printChildAge(); // 자식클래스의 변수를 출력
    }
}
// 부모 클래스
class Parent{
    String name = "Kim";
    int age = 56;
    public Parent(){
    }
}
// 자식 클래스
class Child extends Parent{
    String name = "Lee";
    int age = 27;
    public Child(){
        // super(); 부모 객체 생성
    }
    // 자식클래스에서 부모클래스 변수 지정(super == 부모 객체)
    public void printParentAge(){
        System.out.println(super.name + "의 나이는" + super.age + "입니다.");
    }
    // 자식클래스에서 자식클래스 변수 지정(this)
    public void printChildAge(){
        System.out.println(this.name + "의 나이는" + this.age + "입니다.");
    }
}

실행결과

1
2
Kim의 나이는56입니다.
Lee의 나이는27입니다.

위 예시에서 보면 자식 클래스에서 super.변수명의 형식으로 코드를 작성하면 부모클래스의 인스턴스변수를 지정할 수 있다.

반대로 this.변수명해당 클래스의 인스턴스 변수를 지정하게 된다.

참고사이트

참고사이트

참고사이트

This post is licensed under CC BY 4.0 by the author.