규칙
부모 클래스의 기본 생성자가 없는 경우
자식 클래스에서 상속하려고 하면 컴파일 에러가 발생한다.
public class Parent {
private String name;
public Parent(String name) {
this.name = name;
}
}
기본 생성자가 생성되지 않도록 매개변수가 있는 생성자를 하나 만들었다.
public class Child extends Parent { // 컴파일 에러 발생
}
이제 자식 클래스에서 상속을 하려고 하면 컴파일 에러가 발생한다.
이유
자식 클래스의 생성자가 호출될 때는 항상 부모 클래스의 생성자가 먼저 호출된다.
컴파일러는 자식 클래스가 생성될 때 자동으로 부모 클래스의 기본 생성자를 호출한다.
그러나 지금처럼 부모 클래스의 기본 생성자를 만들지 않았다면 기본 생성자를 못 찾겠다는 오류를 발생시킨다.
Parent() is undefined for default constructor
해결 방법
두 가지 해결 방법이 있다.
1. 기본 생성자를 만드는 것
public class Parent {
private String name;
public Parent() {
}
public Parent(String name) {
this.name = name;
}
}
접근 제어자도 알맞게 해야 한다.
private인 경우는 상속이 안 된다.
2. 부모 클래스의 매개변수가 있는 생성자를 명시적으로 호출
public class Child extends Parent {
public Child() {
super("abc");
}
}
super 키워드를 이용해서 문자열 매개변수를 받는 부모 생성자를 명시적으로 호출했다.
그런데 보통 이렇게 말고 기본 생성자를 만드는 것을 권장한다.
'Java' 카테고리의 다른 글
[Java] 버블 정렬(Bubble Sort) 구현해보기 (0) | 2022.08.16 |
---|---|
[Java] 문자열 뒤집기 (0) | 2022.08.13 |
자바 - 내부 클래스(Inner class) (0) | 2022.08.10 |
자바(Java) - 예외(Exception) (0) | 2022.08.05 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2022.08.03 |