본문 바로가기
back-end/JAVA

25) 참조변수super, 생성자super()

by 모두의 향연 2021. 6. 3.
728x90
반응형

25) 참조변수super, 생성자 super()

 

1. 참조변수super ≒ 참조변수this

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

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

참조변수super 인스턴스메서드(or생성자) 내에서만 사용 조상멤버와 자신멤버를 구별하기 위해 사용
참조변수this static메서드 내에서만 사용 lv와 iv를 구분하기 위해 사용

https://feastforall.tistory.com/29?category=999998 

 

18) 객체지향-생성자 this(), 참조변수 this()

18) 객체지향-생성자 this(), 참조 변수 this() 18-1) 생성자 this() -생성자에서 다른 생성자 호출할 때 사용 Car()의 생성자가 3개 있습니다. 1, 2 생성자가 3번째 생성자를 호출한 것입니다. 원래의 형

feastforall.tistory.com

 

2. 예제

<예제 1>

super, this 예제

child의 객체를 만들어볼게요.

객체생성

super.x는 조상 변수니까 10이 나오고,

this.x는 child클래스에 있는 인스턴스 객체니 20이 나옵니다.

둘 다 이름만 같은 x고 값은 다릅니다.

 

<예제 2>

super, this예제

child의 객체를 만들어볼게요.

객체생성

x와 this.x가 10이 나온 이유는 어차피 조상한테 물려받은 변수는 내 것이기도 하기 때문에 10이 나옵니다.

여기서 x는 super.x이기도 하고 this.x이기도 합니다.

 

 

3. 생성자super()

 

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

상속 부분에서 생성자와 초기화 블록은 상속이 안된다고 배웠죠.

(여기 참고-> https://feastforall.tistory.com/31?category=999998)

 

20)객체지향-클래스 간의 관계-상속(Inheritance)

20) 객체지향-클래스 간의 관계-상속(Inheritance) 1. 정의 -기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용) -두 클래스를 부모와 자식의 관계 2. 형식 class 자식클래스 extends 부모클래스

feastforall.tistory.com

조상의 생성자를 호출할 때 사용(잘못된 예시)

Point3D는 iv를 초기화하고 있죠? 조상의 멤버 x, y를 자손의 생성자에서 초기화하고 있습니다.

에러는 아니지만 저렇게 하면 안 됩니다.

 

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

조상의 생성자를 호출할 때 사용(올바른 예시)

조상의 멤버를 자손이 하지 않고, 조상의 생성자를 호출합니다.

'조상님 죄송하지만 조상님의 멤버는 조상님이 해주세요'

z는 자손의 멤버니까 자손이 해주고, 조상은 조상님이 알아서 해주셔야 됩니다.

super(x, y)에서 x, y가 의미하는 것은 Point(int x, int y)입니다.

 

-생성자의 첫 줄에 반드시 생성자를 호출해야 한다(그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입)

생성자의 첫 줄에 반드시 생성자를 호출해야 한다(안함)
-생성자의 첫 줄에 반드시 생성자를 호출해야 한다(함)

생성자의 첫 줄에 생성자를 호출 안 하면 조상의 생성자를 알아서 호출해주기도 합니다.

일단 규칙은 무조건 외우세요. 무조건. 

따로 노트로 정리해서 그것만 외우도록 하세요.

 

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형