자바의 정석 가자!

[자바의 정석 - 기초편] ch7-10,11 참조변수 super, 생성자 super()

'쪼리' 2022. 11. 7. 17:50

[자바의 정석 - 기초편] ch7-10,11 참조변수 super, 생성자 super()

ch7-10,11 참조변수 super, 생성자 super()

ch7-10 참조변수 super

 - 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재

 - 조상의 멤버를 자신의 멤버와 구별할 때 사용★

 

 +++ this와 거의 같다고 보면 된다!

이참에 this 복습!

this

인스턴스 메서드(생성자)내에서 사용

( = static메서드내에 사용불가)

지역변수와 인스턴스 변수 구별할 때 사용!

 

예제를 보자~!

1번째 예제_ 멤버의 변수명이 겹칠 때

참조변수 super 예제

Child 객체를 만들면, 멤버변수는

1.상속받은 멤버 x

2. 자기멤버변수 x

3. 메서드

이렇게 총 3가지

 

조상의 멤버와 자신의 멤버를 구별해야하니까,

super.x

this.x

로 써준다!

 

c.method() 호출할 때, System.out.println("x=" + x); 의 결과가 x=20인 이유는! 가까운 쪽을 가리키기 때문에 this.x 가리킴

 

** 중요한 거 : 이름이 겹칠 때에도 상속된다!!

둘 다 존재하기 때문에 구별 필요!!

조상멤버는 super, 자기멤버는 this로 접근한다!!! 

 

2번째 예제 _ 멤버의 변수명 겹치지 않을 때.

참조변수 super 예제

멤버가 x와 메서드로 2개밖에 없음.

조상멤버기도 하지만, 상속 받았기 때문에 내것이기도 하니까

super.x 와 this.x가 둘 다 가능!

 

중복되지 않는 경우에는, this.x와 super.x가 같은 변수를 가리킨다!!!!!

 

ch7-11 super() - 조상의 생성자

 - 조상의 생성자를 호출할 때 사용

 - 조상의 멤버는 조상의 생성자를 호출해서 초기화

자손클래스에서 조상생성자 호출할 때 suepr() ; 를 쓴다.

 

( 생성자, 초기화블럭은 상속이 안 됨! )

 

자손의 생성자는 자기가 선언한 것만 초기화해야해!

조상의 멤버를 초기화할 거면, super( ); 사용!

 

super() - 조상의 생성자

 - 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.

어떤 생성자 ? => super() 또는 this()

   그렇지 않으면 컴파일러가 생성자의 첫 줄에 super(); 를 삽입

 

 

 

생성자의 첫 줄에 반드시 생성자를 호출해야 한다.★★★

 

모든 생성자는, 첫줄에 다른 생성자를 호출해야 한다.★

이 조건을 지키지 않으면, 컴파일러가 super()를 첫 줄에 넣어준다.