super()와 super
- 조상의 생성자 super()와 참조변수 super는 this()/this 와 같이 완전히 다른 것이다.
조상의 생성자 super()
- 조상의 생성자를 호출할 때 사용한다.
- 조상의 멤버는 조상의 생성자를 호출해서 초기화한다.
- 생성자의 첫 줄에 반드시 생성자를 호출해야 한다. (호출하지 않으면 컴파일러가 자동으로 첫 줄에 super(); 삽입)
아래 코드를 통해 위 3가지 조건을 정리해보자.
- MyPoint3D라는 클래스는 Point2에서 멤버 x, y를 상속받음.
- MyPoint3D클래스에는 겹치는 멤버가 없기 때문에 this를 이용해서 접근하면 부모의 x, y에 접근하게 됨.
- MyPoint3D클래스의 생성자에서 this를 통해 초기화를 해주는데,
만약 첫번째 빨간 박스가 없다면, Point2 생성자에는 두 멤버(x,y)를 초기화해주는 생성자가 존재하기 때문에 기본 생성자가 없으면 에러가 발생한다.
- 여기서 에러가 발생하는 이유는 컴파일러에 의해서 MyPoint3D() 생성자 첫 줄에 super();가 실행되는데,
super()(= Point2())에 해당하는 생성자가 부모에 없기 때문에 에러가 발생하는 것이다.
- 여기서 에러가 발생하는 이유는 컴파일러에 의해서 MyPoint3D() 생성자 첫 줄에 super();가 실행되는데,
- 때문에 기본생성자는 항상 클래스에 명시해주는 것이 좋다.
- MyPoint3D라는 클래스는 Point2에서 멤버 x, y를 상속받음.
- 부모의 멤버인 x, y를 생성자에서 처리하기 위해서
현재 클래스의 생성자 첫 줄에 super()를 통해 부모의 생성자를 호출. - 부모의 멤버인 x, y는 부모의 생성자에서 처리하고 자식의 멤버인 z는 자식의 생성자에서 this 키워드를 이용하여 처리 함.
참조변수 super
- 객체 자신을 가리키는 참조변수이다.
- 인스턴스 메서드(생성자) 내에서만 존재할 수 있다.
- 조상의 멤버를 자신의 멤버와 구별할 때 사용한다.
'JAVA' 카테고리의 다른 글
18. 캡슐화 (0) | 2022.10.03 |
---|---|
17. 제어자 (0) | 2022.10.03 |
15. 오버라이딩 (0) | 2022.10.02 |
14. 상속과 포함 (0) | 2022.10.02 |
13. 멤버변수의 초기화 (0) | 2022.09.25 |