Loading...

JAVA / / 2022. 1. 20. 12:02

자바 25강. Super

반응형

자바에서는 super(키워드)부모, this자신을 뜻한다.

 

this : 자기 자신의 heap 메모리 공간

 

클래스를 new 하기 전에

나중에 메모리에 뜰 heap 공간을 가리킨다는 말이다.

 

그럼 new를 하는 시점에

this는 메모리에 뜬 내 heap공간을 가리키게(바인딩) 된다.

 

super : this와 마찬가지로

클래스를 new하기 전에

나중에 메모리에 뜰 부모의 heap 공간을 가리킨다는(바인딩) 말이다.

 

+ super는 extends를 했을 때만 사용이 가능하다.

 

 

자식을 new할때 상속되어있는 부모도 같이 메모리에 뜨고

부모의 생성자도 실행된다.

 

부모가 디폴트 생성자가 아닌 매개변수를 받는 생성자일 때 오류가 생긴다.

이때는 생성자 오버로딩을 해줘야 오류가 잡힌다.

 

실행하면 그냥 디폴트 생성자가 실행되어 출력문이 나오지 않는다.

 

상속은 부모의 디폴트 생성자를 때리기 때문이다.

왜 그럴까?

 

자식을 new 하면 자식의 생성자에 super( ) 문장이 생략되어 있기 때문이다.

그래서 이 super( )는 부모의 생성자를 호출하는 것이기 때문에

부모의 디폴트 생성자가 호출되는것이다.

 

즉, 자식을 new했을 때 부모도 new가 되는 이유인것이다.

 

내가 직접 super( )를 적고 안에 값을 전달해주면

부모의 디폴트 생성자가 아닌 매개변수를 가진 생성자가 실행되는 것이다.

 

package ex11;

class 가구 {
    String name = "가구";

    가구() {

    }

    가구(int num) {
        System.out.println("나 실행되니 ?");
    }
}

class 침대 extends 가구 {
    String name = "침대";

    침대() {
        super(1);   // super() 이 문장이 항상 생략되어 있음. 
                    //내가 적으면 사라짐.
        System.out.println(super.name);
    }
}

public class SuperEx01 {
    public static void main(String[] args) {
        침대 s = new 침대();
    }
}

 

정리

 

1. super는 부모의 heap공간, this는 자신의 heap공간

 

메모리에 띄워져 있지 않았을 때

나중에 띄워질 데이터를 가리키는 키워드 2개

단, super는 상속을 했을때만 사용 가능

 

2. (상속의 관계일 때) 자식을 new 하면 자식의 생성자에 super( ) 문장이 생략되어 있음.

 

 

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형