클래스를 정의할 때, 어떠한 생성자도 개발자가 명시적으로 정의하지 않으면, 기본적으로, 컴파일러가 기본 생성자를 삽입됩니다. (우리들 눈에는 보이지 않습니다.) 하지만, 하나라도 생성자를 명시적으로 만들면, 컴파일러는 생성자를 자동으로 만들어 넣지 않습니다.


이러한 생성자 메소드를 호출하려면, 반드시 new 생성자(...); 의 형태로 호출해야 합니다. new 를 붙이지 않고, 일반 메소드 호출처럼 메소드명만으로 호출하려고 한다면, 생성자 메소드가 아닌, 일반 메소드를 찾게 됩니다.


상속 관계에 있어, 하위 클래스의 생성자에서는, 가장 처음에, 무조건 부모 클래스의 생성자를 호출해야 합니다. 부모 클래스의 생성자를 명시적으로 호출하게 하려면, super() 혹은, super(매개변수들...) 의 형태를 통해서, 부모 클래스의 생성자를 호출해주어야 합니다. 하지만, super 관련하여 부모 클래스의 생성자를 명시적으로 호출하는 코드가 없다면, 컴파일러는 기본적으로 부모 클래스의 기본 생성자를 호출하도록 super() 문을 삽입합니다. (우리들 눈에는 보이지 않습니다.)


또한, super. 을 통해서, 부모의 멤버로 접근할 수 있습니다. super.멤버변수명; 은 부모 클래스의 멤버변수에 접근하는 것이고, super.메소드명(); 은 부모 클래스의 메소드를 호출하는 것입니다.

by kkikkodev 2015. 6. 16. 10:35