[Java] 자바 상속된 자식 클래스의 생성자 컴파일 오류 해결방법!

2021-01-13


자바의 상속관계를 구현하는 과정 중 자식 클래스의 생성자에서 컴파일 오류가 발생하는 것을 간혹 목격할 수 있는데, 이와 같은 오류를 해결하는 방법을 알아보자.


우선 아래는 예제로 사용될 부모 클래스이다.

package eException2;

public class Parent {
	String name;
	int age;
	
	
	public Parent(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

이후 자식 클래스에서 성별이라는 필드를 추가해 새로운 생성자를 만들 예정이다.

하지만 위와 같이 생성자에서 컴파일 오류가 발생하게 된다. 분명 extends로 Parent를 물려받아 필드 name / age를 사용할 수 있는데, 실제 코드에서는 이를 허용하지 않다. 

해당 x 표시에 커서를 가져다 대면 자세한 내용을 확인할 수 있다. 여기서 주의 깊게 봐야 할 문장은 Implicit super constructor Parent() is undefined. 이다. 바로 부모 생성자에서 사용했던 필드 값들을 정의해주지 않았다는 것이다. 이를 위해서 필요한 것이 바로 super( )이다. 이는 바로 자식 클래스가 부모 클래스에게 무엇을 상속받았는지 명시적으로 알려주는 역할을 하는데, 이 super로 부모 클래스의 필드 값인 name / age를 감싸주면 해당 오류는 발생하지 않는다. 아래 수정된 코드를 보자.


package eException2;

public class Child extends Parent{
	String sex;

	public Child(String name, int age, String sex) {
		super(name, age);
		this.sex = sex;
	}

}	

 

보는 것과 같이 super로 부모클래스에서의 필드 값을 담아줌으로써 컴파일 오류가 사라지고 정상적으로 생성자가 작성된 것을 확인할 수 있다.