본문 바로가기

언어/Java

[JAVA 기초] super() 와 this()

1. super()

 : 일반적으로 자바에서는 하위클래스에서 상위클래스의 생성자를 호출하는 것이 불가능하다.

위와 같은 Driver Class(main함수)를 실행한다.

 

부모클래스(상위클래스)

 

자식클래스(하위클래스)
오류발생

위에서 보면 하위클래스(RubberDuck)에서 상위클래스(Duck)을 호출했을때 오류가 발생하는 것을 볼 수있다.

 

   하지만 super() 함수를 이용하면 상위클래스의 생성자를 호출하는 것이 가능하다.

super()를 사용한 하위클래스

 

출력결과

 

   또한, 자바의 모든 생성자들(오버로딩된 생성자 포함)은 첫줄에 super()가 생략되어 있다.

   -> 즉 첫줄에 super()를 쓰지 않더라도 super()를 쓴것과 같은 결과를 볼 수있다.

super()를 사용하지 않은 하위클래스
출력결과

super()를 쓰지 않아도 결과가 같다!!

 

2. 매개변수가 있는 super() -> 오버로딩 생성자 호출

 : super 안에 매개변수를 넣어주면 하위클래스에서 상위클래스의 오버로딩함수를 호출하는 것이 가능하다.

오버로딩함수를 추가한 상위클래스
매개변수가 있는 super()를 사용한 하위클래스
출력결과

 

3. this()

 : this()는 super()와 비슷하지만 같은 클래스의 오버로딩된 다른 생성자를 호출할 때 사용한다.

   this. 키워드와는 다른것으로 주의해야한다.

this()를 사용한 상위클래스
출력결과

위와 같은 경우 Duck() 메서드안에서 오버로딩된 Duck(int a)를 this()를 통해 호출하는 것을 볼수 있다.

 

4. super()와 this() 사용시 주의점

 : super()와 this()는 한 메서드 안에서 동시에 사용하는 것이 불가능하다.

  super()와 this()는 무조건 첫째줄에서만 사용 가능하다.