this()
또는에 대한 명시 적 호출로 시작하지 않는 생성자가있는 경우 super()
컴파일러는 기본 슈퍼 클래스 생성자에 대한 호출을 자동으로 삽입합니다. 로부터 Java 언어 사양 (§8.8.7) :
생성자 본문이 명시 적 생성자 호출로 시작하지 않고 선언되는 생성자가 기본 클래스 Object의 일부가 아닌 경우 생성자 본문은 다음의 생성자의 호출 인 수퍼 클래스 생성자 호출 "super ();"로 암시 적으로 시작됩니다. 인수를 취하지 않는 직접 수퍼 클래스.
따라서 AbsClass()
의 생성자 Extender
가 실행 을 시작할 때 기본 생성자 가 호출됩니다 .
상속 된 클래스가있는 경우 생성자는 항상 모든 조상에 대해 호출됩니다.
당신이 그것을로 지정 해달라고하면 super(parameters)
, 다음 super()
기본적으로 호출된다.
상위에 매개 변수가있는 생성자가 있고 매개 변수가없는 생성자가없고 확장 된 클래스가 호출하려는 생성자를 지정하지 않으면 코드를 컴파일 할 수 없습니다.
예 :
public abstract class AbsClass {
public AbsClass(String text) {
System.out.println("AbsClass called: " + text);
}
}
public class Extender extends AbsClass {
public Extender() {
System.out.println("Extender called");
}
}
컴파일 할 수 없습니다.
(중요한 것 : 클래스에 생성자가 없으면 매개 변수를 취하지 않는 암묵적으로 자동 생성 된 생성자가 있습니다.)
출처
https://stackoverflow.com/questions/22050283