1. super()
: 일반적으로 자바에서는 하위클래스에서 상위클래스의 생성자를 호출하는 것이 불가능하다.
위에서 보면 하위클래스(RubberDuck)에서 상위클래스(Duck)을 호출했을때 오류가 발생하는 것을 볼 수있다.
하지만 super() 함수를 이용하면 상위클래스의 생성자를 호출하는 것이 가능하다.
또한, 자바의 모든 생성자들(오버로딩된 생성자 포함)은 첫줄에 super()가 생략되어 있다.
-> 즉 첫줄에 super()를 쓰지 않더라도 super()를 쓴것과 같은 결과를 볼 수있다.
super()를 쓰지 않아도 결과가 같다!!
2. 매개변수가 있는 super() -> 오버로딩 생성자 호출
: super 안에 매개변수를 넣어주면 하위클래스에서 상위클래스의 오버로딩함수를 호출하는 것이 가능하다.
3. this()
: this()는 super()와 비슷하지만 같은 클래스의 오버로딩된 다른 생성자를 호출할 때 사용한다.
this. 키워드와는 다른것으로 주의해야한다.
위와 같은 경우 Duck() 메서드안에서 오버로딩된 Duck(int a)를 this()를 통해 호출하는 것을 볼수 있다.
4. super()와 this() 사용시 주의점
: super()와 this()는 한 메서드 안에서 동시에 사용하는 것이 불가능하다.
super()와 this()는 무조건 첫째줄에서만 사용 가능하다.