Java에서는 하위 클래스를 생성하는 과정에서 상위 클래스의 생성자를 호출해야 합니다. 이는 상속 관계가 있을 때 하위 클래스가 상위 클래스의 내용을 상속해야 하기 때문입니다.
대답은 다음과 같습니다.
하위 클래스 객체를 새로 만들려면 먼저 상위 클래스의 새 객체를 만들어야 합니다. 이 상위 클래스 객체는 하위 클래스 객체 내에 위치합니다. 따라서 하위 클래스 객체는 상위 클래스 객체보다 큽니다. 메모리의 실제 상황입니다. 생성 메서드가 새 객체인 경우 이를 호출해야 합니다. 이는 부모 클래스 객체를 새로 생성하려는 경우 해당 생성 메서드를 호출해야 하는 규칙입니다.
첫 번째 규칙: 하위 클래스를 생성하는 동안 해당 상위 클래스의 생성 메서드를 호출해야 합니다. 클래스의 경우 생성자를 작성하지 않으면 컴파일러는 기본 생성자를 추가하는 데 도움을 줍니다. 소위 기본 생성자는 매개 변수가 없는 생성자이지만 생성자를 직접 작성하면 컴파일러는 그렇지 않습니다. 추가되었으므로 새 하위 클래스 객체를 생성할 때 하위 클래스의 생성자를 호출해야 하는 경우가 있지만 하위 클래스의 생성자에서는 기본 클래스의 생성자를 명시적으로 호출하지 않습니다. 즉, Write가 없습니다. , 예: super(); 이렇게 작성하지는 않지만 부모 클래스의 매개변수 없이 생성자를 호출하게 되는데, 부모 클래스에 매개변수 없는 생성자가 없으면 오류가 발생합니다.
두 번째 규칙: 하위 클래스의 생성자에 기본 클래스 생성자에 대한 명시적인 호출이 없으면 시스템은 기본적으로 기본 클래스의 매개 변수 없는 생성자를 호출합니다. 하위 클래스의 생성자가 있고 기본 클래스에 매개변수 없는 기본 생성자가 없으면 컴파일 오류가 발생합니다. 따라서 일반적으로 매개변수를 사용하여 상위 클래스의 생성자를 호출하려면 super(매개변수 목록)를 표시해야 합니다.
//새 생성자를 정의하는 경우
public Animal(문자열 이름) {
this.name = 이름;
}
}
공개 개는 동물을 확장합니다{
//이때, 하위 클래스는 기본적으로 상위 클래스를 호출하기 때문에 명시적으로 상위 클래스의 생성자를 호출해야 합니다.
//매개변수 생성자 없음 Animal()
공개 개(){
super("puppy"); //부모 클래스를 호출하는 매개변수화된 생성자 메서드를 표시합니다.
.... //하위 클래스의 생성자 메서드 처리
}
}
//물론, 부모 클래스에 매개 변수 없는 생성자를 명시적으로 작성하는 경우는 다음과 같습니다.
클래스 동물{
개인 문자열 이름;
//매개변수가 없는 생성 방법
공공 동물() {
..... //처리
}
/*
새 생성자를 정의하는 경우 하위 클래스의 생성자에서 하위 클래스에 매개 변수가 없는 생성자가 있으므로 명시적으로 호출하지 않고도 상위 클래스의 생성자를 호출할 수 있습니다.
서브클래스는 생성자의 상위 클래스에 의해 정의된 매개변수 없는 생성자를 자동으로 호출합니다.
*/
public Animal(문자열 이름) {
this.name = 이름;
}
}