(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 값을 넣으면 됩니다.

    위 내용을 정확하게 이해하려면 생성자에 대한 이해가 필요한데요. 해당 내용은 이 글로 대체하겠습니다. 오래된 글이지만 설명이 잘되어 있습니다. 도움이 되었으면 좋겠네요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)