(java)상속 및 생성자 호출 문제
조회수 3082회
// 상위 클래스
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setAge(int age) { this.age =age; }
public int getAge() { return age; }
}
// 하위 클래스
class Student extends Person {
private int id;
private String major;
public Student(String name, int id) {
super(name, super.getAge()); // error!
this.id = id;
}
// 변수에 해당하는 접근자, 설정자
// ... 생략
}
이 코드에서 생성자나 매개변수를 변경하면 안된다는데 하위클래스에서 상위클래스의 생성자를 호출할 때 저기 에러나는 부분에서
Cannot refer to 'this' nor 'super' while explicitly invoking a constructor
이런 오류가 뜨더라구요.
하위 클래스의 생성자에 다른 매개변수를 추가하지 않고 상위 클래스에 써져있는 생성자를 호출하는 게 가능한가요? 문제가 잘못된 건 아닌 것 같아요ㅠㅠㅠㅠㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
super()는 부모 클래스의 생성자를 호출합니다.
super 는 부모 클래스의 객체를 참조합니다.
해당 에러는 객체가 생성되기도 전에 객체의 메서드를 호출(참조)하기때문에 오류가 발생하는 것입니다.
즉 부모 클래스 Person 의 객체를 생성하는 중에 Person 객체를 참조하여 발생하는 것인데요. super.getAge() 대신 int 값을 넣으면 됩니다.
위 내용을 정확하게 이해하려면 생성자에 대한 이해가 필요한데요. 해당 내용은 이 글로 대체하겠습니다. 오래된 글이지만 설명이 잘되어 있습니다. 도움이 되었으면 좋겠네요.
댓글 입력