super 키워드는 부모 클래스로부터 상속받은 필드나 메서드를 자식 클래스에서 참조하는 데 사용하는 참조변수이다.
자바에서는 super 참조 변수를 사용하여 부모 클래스의 맴버에 접근할 수 있다.
this와 마찬가지로 참조 변수를 사용할 수 있는 대상도 인스턴스 메서드뿐이며, 클래스 메서드에서는 사용할 수 없다.
int형 변수 a를 부모 클래스와 아들 클래스를 값을 따로 선언되있을 때
아들 클래스에서 a값을 출력 했을때 tihs로 사용한 값과 super로 사용한 값이 다른것을 확인할 수 있다.
this 참조 변수는 자식 클래스(자기자신)에서 대입된 값을 출력하며, super 참조 변수는 부모 클래스에서 대입된 값을 출력하게 된다.
this()메서드가 같은 클래스의 다른 생성자를 호출할 때 사용된다면, super()메서드는 부모 클래스의 생성자를 호출할 때 사용된다.
자식 클래스의 인스턴스를 생성하면, 해당 인스턴스에는 자식 클래스 고유 멤버뿐만아니라, 부모 클래스의 모든 멤버까지도 포함되어 있다.
따라서, 부모클래스의 멤버를 초기화하기 위해서는 자식 클래스의 생성자에서 부모 클래스의 생성자까지 호출해야만 한다.
이러한 부모 클래스의 생성자 호출은 모든 클래스의 부모 클래스인 Object 클래스의 생성자까지 계속 거슬러 올라가며 수행된다.
만약 자식 클래스가 super()를 사용하여 부모 클래스의 생성자를 호출할 때 부모 클래스에서 기본생성자가 추가되어 있지 않다면 오류를 발생 시킨다. (하단 참조)
매개변수를 가지는 생성자를 선언해야 할 경우에는 되도록이면 기본 생성자까지 명시적으로 선언하는것이 좋다.