해결된 질문
작성
·
299
·
수정됨
0
Generic in inheritance 강의에서 궁금한점이 있어서 질문 드립니다!
밑에 코드처럼 자식 클래스(Winter, Winter2)가 부모 클래스(Person)로 부터 상속을 받았는데
Winer와 Winter2 둘다 super constructor로 부모 속성을 설정 하지 않았는데
어떻게 정상적으로 인스턴스에서 부모속성을 가져오는지 궁금합니다~
class Person<T, Z>{
name: T;
age: Z;
constructor(name: T, age: Z) {
this.name = name;
this.age = age;
}
}
// Winter 클래스 상속
class Winter extends Person<string, number>{
};
const winter = new Winter('김민정', 22);
console.log(winter);
// Winter2 클래스 상속
class Winter2<T, Z> extends Person<T, Z>{
}
const winter2 = new Winter2('김민정', 22);
console.log(winter2);
보통의 경우 이렇게 해줘야 하지 않나요? 이렇게 해도 작동은 잘 되더라고요ㅎㅎ;;
constructor(name:string, age:number){
super(name, age)
}
그런데 또 이런 경우는 super constructor 하지 않으면 에러가 발생합니다 ㅎ;
class Winter3<T, Z, Part> extends Person<T, Z>{
part?: Part;
constructor(part?: Part) {
this.part = part
}
}
답변 1
1
안녕하세요!
자식 클래스에서 constructor를 선언했을때 super 키워드를 사용하지 않으면 왜 에러가 나는지에대한 질문이 맞을까요?
이 부분은 대부분의 언어에 공통적으로 적용되는 부분입니다. 상속을 받을때 부모 클래스의 생성자를 그대로 사용하면 문제가 없습니다.
하지만 생성자를 '변형'하려고하면 (참고로 JS/TS의 경우 super 키워드를 부르기만 하는 생성자를 선언하더라도 해당됩니다) super 생성자를 '무조건' 불러줘야합니다.
상속을 받는거기때문에 어떻게든 부모 클래스의 생성자를 충족시켜야 하기 때문이죠.
감사합니다!
자식 클래스에서 아예 생성자를 선언하지 않는 경우에는 부모의 생성자를 그대로 상속받기때문에 문제가 되지 않습니다!