문제상황:
Java에서 클래스 상속을 사용하여 프로젝트를 진행하던 중 다음과 같은 에러가 발생했습니다. 에러 발생 코드는 실무에서 사용될 수준의 코드입니다.
에러가 발생한 코드:
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void speak() {
System.out.println("I'm an animal");
}
}
public class Dog extends Animal {
private String breed;
public Dog(String name, String breed) {
super(name);
this.breed = breed;
}
@Override
public void speak() {
System.out.println("Woof!");
}
public void printBreed() {
System.out.println("Breed: " + breed);
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Buddy", "Golden Retriever");
dog.speak();
dog.printBreed();
}
}
에러로그 내용:
Error: constructor Animal in class Animal cannot be applied to given types;
required: java.lang.String
found: no arguments
reason: actual and formal argument lists differ in length
해결방법:
에러가 수정된 코드 및 수정된 부분에 대한 주석:
public class Animal {
private String name;
// 기본 생성자 추가
public Animal() {
}
public Animal(String name) {
this.name = name;
}
public void speak() {
System.out.println("I'm an animal");
}
}
public class Dog extends Animal {
private String breed;
public Dog(String name, String breed) {
super(name);
this.breed = breed;
}
@Override
public void speak() {
System.out.println("Woof!");
}
public void printBreed() {
System.out.println("Breed: " + breed);
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Buddy", "Golden Retriever");
dog.speak();
dog.printBreed();
}
}
원인분석:
에러 발생 원인은 Dog 클래스에서 상위 클래스인 Animal 클래스의 생성자를 호출할 때, 인자가 없는 생성자를 찾지 못해서 발생한 것입니다. Animal 클래스에는 기본 생성자가 정의되어 있지 않기 때문에 문제가 발생한 것입니다. 따라서, Animal 클래스에 기본 생성자를 추가해주어 문제를 해결할 수 있습니다.
참고링크:
728x90