This와 Super는 상속관계를 배울 때 많이 사용하게 됩니다.
그 중에서도 Super를 다뤄볼까 합니다.
간단히 This와 Super에 대해서 설명 드리겠습니다.
This : 인스턴스 자신을 가르키는 참조 변수 , 인스턴스의 주소가 저장되어 있음
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재
Super : this와 같음 , 조상의 멤버와 자신의 멤버를 구별하는데 사용
다음 코드를 보시죠.
this가 지역변수와 멤버변수를 구별하는 데 사용된 것처럼... super는 상속받은 멤버와 자신의 멤버를 구별하는 데 사용됩니다.
왼쪽 코드 중에서... 위에 있는 코드를 먼저 보면... Parent클래스가 있고...이 클래스를 상속받는 Child클래스가 있습니다.
Parent와 Child에 똑같이 멤버변수 x가 선언되어 있습니다.
이처럼 조상의 멤버변수와 같은 이름의 변수를 자손의 멤버변수로 중복해서 선언하는 것이 가능합니다.
인스턴스가 생성되면... 각각 별도의 저장공간을 차지하게 됩니다. 이름은 같아도 서로 다른 변수라는 것이죠.
이 둘을 구별하기 위해서는 참조변수 super를 사용해야 합니다. super를 붙이지 않으면...
Child클래스의 멤버변수 x를 의미하게 됩니다.
그래서... 오른쪽 코드와 같이 Child인스턴스를 생성한 다음에... method()를 호출하면...
x는 Child클래스의 멤버변수 x를 의미하므로 20이 출력되고요. this.x역시 Child클래스의 멤버변수 x를 의미하므로 역시 20이 출력됩니다.
super.x는 조상인 Parent로 부터 상속받은 멤버변수 x를 의미하므로 10이 출력됩니다.
왼쪽의 아래에 있는 코드는... 위의 코드와 달리 Child클래스에 멤버변수 x가 없습니다. 나머지는 똑같습니다.
이 때 Child클래스의 인스턴스를 생성해서 method를 호출하면... 변수 x가 하나밖에 없기 때문에 선택의 여지가 없이...
조상으로부터 상속받은 멤버변수 x를 의미합니다. 그래서 10이 출력되고요.
this.x역시 상속받은 멤버변수 x를 의미하므로 역시 10이 출력됩니다.
super.x는 조상의 멤버변수 x를 의미하므로 10이 출력됩니다.
사실 여기서는 자신의 멤버가 조상의 멤버와 중복되지 않기 때문에... super를 사용할 필요가 없습니다.
상속받은 멤버도 자신의 멤버이므로 this를 사용하는 것만으로도 충분합니다.
단지 참고로... super를 사용했을 때 어떤 결과가 나오는지 보여드리기 위한 것이었습니다.
this와 super는 조상의 멤버와 자신의 멤버를 구별하기 위해서 사용된다는 것을 제외하고는 근본적으로 같습니다.
this처럼 super도 인스턴스메서드 내에 지역변수로 숨겨진 채로 존재하고요 super에도 인스턴스의 주소가 저장되어 있습니다.
'Backend > java' 카테고리의 다른 글
패키지(Package)의 정의 (0) | 2018.08.12 |
---|---|
Super의 메서드사용 (0) | 2018.08.09 |
오버라이딩 Vs 오버로딩 의 차이점 (0) | 2018.08.09 |
오버라이딩의 조건은 무엇일까?? (0) | 2018.08.09 |
오버라이딩(Overriding)이란?? (0) | 2018.08.09 |
#IT #먹방 #전자기기 #일상
#개발 #일상