상세 컨텐츠

본문 제목

[JAVA] 자바_상속의 골치덩이 super, this 뽀개기

java_자바

by 쫑메이 2020. 7. 1. 00:42

본문

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

도대체 자바의 상속에 나오는

super, this는 뭐지?

(먼저 상속을 모른다면 super와 this를  이해하기는 무리니

상속 먼저 보고 오길 권유드립니다)


 

 

 

 

 


자바 상속_ super란?


 

오버 라이딩을 하면 덮어쓰기는 하지만 본래 것이 없어지는 것은 아니고

은닉되어 있는 상태인데

super을 통해서 다시 호출할 수 있다

 

 

this를 통해서 객체의 멤버에 접근할 수 있었듯

super을 통해서 부모 객체의 멤버에 접근할 수 있다

this가 현재 객체를 참조한다면, super은 부모 객체를 참조한다

 

 

 

 

 

 

 

 


자바 상속에서 꼭 나오는 super는 레퍼런스 변수


 

슈퍼클래스의 멤버에 접근하기 위한 키워드(= 레퍼런스 변수)

- 레퍼런스 this와 동일하나 슈퍼클래스 인스턴스 주소가 저장되어 있는 점이 다르다!

(= 레퍼런스 this는 자신의 인스턴스 주소가 저장되어 있음)

주로, 오버라이딩에 의해 은닉된 변수 또는 메서드에 접근해야 할 경우 사용

(자신의 멤버 : this.XXX 부모의 멤버 : super.XXX)

 

 

 

 

 

 

 

 

 

 

 

 

 

 


서브 클래스의 메서드 내에

슈퍼클래스와 동일한 이름의 변수가 존재할 때 탐색과정


 

 

1) 현재 호출된 곳을 기준으로 가장 가까운 곳부터 점차 탐색 범위를 넓혀 가면서 탐색한다

(ex. 로컬 변수 -> 멤버 변수 -> 슈퍼클래스의 멤버 변수)

 

 

 

2) 최종적으로 Object 클래스까지 거슬러 올라가면서 탐색하여 없을 경우 오류 발생!

 

 

 

 

 

 

 

 

 

 

 

 

 


부모 생성자를 호출하는 생성자_ super

 


 

super는 슈퍼클래스의 생성자를 명시적으로 호출

여기서 super은 슈퍼클래스인 object() 클래스의 생성자 object()를 생성

Person의 생성자를 부르는 것이다

 

 

 

 

 

 

 

 

 

 

 

서브 클래스의 기본 생성자에서 슈퍼 클래스인 Person 클래스의 기본 생성자를 자동으로 호출

만약, 슈퍼클래스의 생성자 중 파라미터 생성자만 존재한다면 오류가 발생하게 된다

따라서 슈퍼클래스에 기본 생성자를 별도로 정의하거나

슈퍼클래스의 파라미터 생성자를 서브 클래스 생성자 내에서 명시적으로 호출해야 한다

 

 

 

 

 

 

 

 

 

 

 

 


도대체 super은 왜 쓰냐? 필요성

 


 

목적 1) 슈퍼클래스의 생성자 중 특정 생성자를 명시적으로 호출해야 하는 경우

ex) 슈퍼클래스에 기본 생성자 없이 파라미터 생성자만 정의할 경우

서브 클래스에서 슈퍼클래스의 기본 생성자를 호출하지 못해 오류 발생

이때, 슈퍼클래스의 파라미터 생성자를 명시적으로 호출할 때 사용

 

 

 

 


 

목적 2) 슈퍼클래스의 생성자에서 초기화하는 코드가 존재할 경우

ex) 서브 클래스 생성자에서 슈퍼클래스의 멤버 변수까지 초기화하면 코드 중복 발생

이때, 슈퍼클래스의 멤버는 슈퍼클래스의 생성자에서, 서브 클래스의 멤버는

서브 클래스의 생성자에서 초기화하여 중복을 제거하기 위해 사용

!!!! 생성자 super은 반드시 생성자 내에서 첫 번째 문장으로 실행되어야 한다

 

 

 

 

 

 

 

 

 

 

 

 


생성자 super 주의사항


 

 

주의! 생성자 super()는 반드시 생성자 내에서

첫 번째 문장으로 실행되어야 한다!

 

 

 

 

 

 

 

 

 

 

 

 

 

 


마지막으로 다시 정리하기!


 

 

 

 

 

 

 

 

 


ㅣ읽느라 수고 많으셨어요~ㅣ

 

 

 


 


 

 

 

 

 

 

 

부족한 글을 읽어주셔서 감사드립니다

아직 부족한 게 많으니

틀린 곳이 있다면

조언의 말씀 꼭 부탁드립니다!!!!

 

 

 


 

 

반응형

관련글 더보기