부모클래스로부터 상속받은 필드나 메서드를 자식 클래스에서 참조하는데 사용하는 참조변수이며
자식클래스 실행시 부모클래스 먼저 실행이된다. 즉 Super가 생략되어있다는것
하지만 부모 생성자가 매개변수라면 Super을 생략할수없다.
바로 예제를 보자
public class Parent { public Parent(int n) { System.out.println("부모(Parent)생성자 호출"+n); } public int result(int n){ return n; } } ===================== public class Child extends Parent{ public Child(int n) { super(n); //부모클래스의 생성자(생략가능) System.out.println("자식(child)생성자 호출"+(n+1)); } @Override public int result(int n) { //super.result():부모클래스의 result()메서드 호출 System.out.println("자식(child)생성자 호출"); return 150; } } ===================== public class SuperMain { public static void main(String[] args) { Child c1 = new Child(5); } } |
Parent 클래스는 자신의 매개변수 생성자를 만들고 출력문을 만들어주었다.
Child 클래스는 Parent 클래스를 상속받는데 Parent 생성자는 매개변수를 받기때문에 super을 써서 입력받은 값을
Parent 클래스의 result 메서드에 넣어준다.
즉 매개변수가 없을때는 입력받는게 없어서 super()을 써주지 않아도되었지만 실제로는 자바가 자동으로 써준것이다.
정리하면 매개변수를 사용하는 부모가 있다면 Super()을 사용해야하며 사용시 main에서 자식클래스를 호출해도
부모클래스의 생성자가 제일먼저 실행된다는것이다.
그래서 위 코드의 결과값은
부모(Parent)생성자 호출5
자식(child)생성자 호출6
이렇게 출력이된다.(순서확인)