본문 바로가기
Java

[Java] 부모 클래스의 기본 생성자가 없는 경우의 상속

by 작은돼지 2022. 8. 20.

규칙

부모 클래스의 기본 생성자가 없는 경우

자식 클래스에서 상속하려고 하면 컴파일 에러가 발생한다.

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 키워드를 이용해서 문자열 매개변수를 받는 부모 생성자를 명시적으로 호출했다.

그런데 보통 이렇게 말고 기본 생성자를 만드는 것을 권장한다.