[자바의 정석 - 기초편] ch7-10,11 참조변수 super, 생성자 super()
[자바의 정석 - 기초편] ch7-10,11 참조변수 super, 생성자 super()
ch7-10,11 참조변수 super, 생성자 super()
ch7-10 참조변수 super
- 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재
- 조상의 멤버를 자신의 멤버와 구별할 때 사용★
+++ this와 거의 같다고 보면 된다!
이참에 this 복습!
this
인스턴스 메서드(생성자)내에서 사용
( = static메서드내에 사용불가)
지역변수와 인스턴스 변수 구별할 때 사용!
예제를 보자~!
1번째 예제_ 멤버의 변수명이 겹칠 때
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번째 예제 _ 멤버의 변수명 겹치지 않을 때.
멤버가 x와 메서드로 2개밖에 없음.
조상멤버기도 하지만, 상속 받았기 때문에 내것이기도 하니까
super.x 와 this.x가 둘 다 가능!
중복되지 않는 경우에는, this.x와 super.x가 같은 변수를 가리킨다!!!!!
ch7-11 super() - 조상의 생성자
- 조상의 생성자를 호출할 때 사용
- 조상의 멤버는 조상의 생성자를 호출해서 초기화
자손클래스에서 조상생성자 호출할 때 suepr() ; 를 쓴다.
( 생성자, 초기화블럭은 상속이 안 됨! )
자손의 생성자는 자기가 선언한 것만 초기화해야해!
조상의 멤버를 초기화할 거면, super( ); 사용!
- 생성자의 첫 줄에 반드시 생성자를 호출해야 한다.★★★
어떤 생성자 ? => super() 또는 this()
그렇지 않으면 컴파일러가 생성자의 첫 줄에 super(); 를 삽입

모든 생성자는, 첫줄에 다른 생성자를 호출해야 한다.★★★
이 조건을 지키지 않으면, 컴파일러가 super()를 첫 줄에 넣어준다.