본문 바로가기
JAVA

16. super()와 super

by seongju.lee 2022. 10. 2.

super()와 super

  • 조상의 생성자 super()와 참조변수 super는 this()/this 와 같이 완전히 다른 것이다.

조상의 생성자 super()

  • 조상의 생성자를 호출할 때 사용한다.
  • 조상의 멤버는 조상의 생성자를 호출해서 초기화한다.
  • 생성자의 첫 줄에 반드시 생성자를 호출해야 한다. (호출하지 않으면 컴파일러가 자동으로 첫 줄에 super(); 삽입)

아래 코드를 통해 위 3가지 조건을 정리해보자.

생성자의 첫 줄에 super();을 호출하지 않고, 부모에 기본 생성자를 생성하지 않을 때, 발생할 수 있는 에러

  • MyPoint3D라는 클래스는 Point2에서 멤버 x, y를 상속받음.
  • MyPoint3D클래스에는 겹치는 멤버가 없기 때문에 this를 이용해서 접근하면 부모의 x, y에 접근하게 됨.
  • MyPoint3D클래스의 생성자에서 this를 통해 초기화를 해주는데,
    만약 첫번째 빨간 박스가 없다면, Point2 생성자에는 두 멤버(x,y)를 초기화해주는 생성자가 존재하기 때문에 기본 생성자가 없으면 에러가 발생한다.
    • 여기서 에러가 발생하는 이유는 컴파일러에 의해서 MyPoint3D() 생성자 첫 줄에 super();가 실행되는데,
      super()(= Point2())에 해당하는 생성자가 부모에 없기 때문에 에러가 발생하는 것이다.
  • 때문에 기본생성자는 항상 클래스에 명시해주는 것이 좋다.

 

 

 

조상의 멤버는 조상의 생성자를 호출하여 처리하는 방식.

  • MyPoint3D라는 클래스는 Point2에서 멤버 x, y를 상속받음.
  • 부모의 멤버인 x, y를 생성자에서 처리하기 위해서
    현재 클래스의 생성자 첫 줄에 super()를 통해 부모의 생성자를 호출.
  • 부모의 멤버인 x, y는 부모의 생성자에서 처리하고 자식의 멤버인 z는 자식의 생성자에서 this 키워드를 이용하여 처리 함.

 

 

참조변수 super

  • 객체 자신을 가리키는 참조변수이다.
  • 인스턴스 메서드(생성자) 내에서만 존재할 수 있다.
  • 조상의 멤버를 자신의 멤버와 구별할 때 사용한다.

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