특정 클래스 속성을 다른 클래스가 이어받게 할 수 있다
class 할아버지 {
constructor(fname, lname) {
this.lname = fname
this.fname = lname;
}
}
// var 할아버지1 = new 할아버지('만덕')
class 아버지 extends 할아버지 {
constructor(fname, lname) {
super(fname, lname);
this.age = 50;
}
}
이때 extend class에 꼭 super 써주어야 속성 사용 가능하다
상위 클래스의 생성자
위 코드에서는 할아버지 class의 constructor를 뜻함
상위 클래스의 생성자의 속성
위 코드에서는 할아버지 class의 속성들을 뜻함
그러므로 아버지 class에서 super()를 사용하면
할아버지 class의 속성인 lname, fname이 상속됨
class 할아버지 {
constructor(fname, lname) {
this.lname = fname
this.fname = lname;
}
sayHi() {
console.log('할아버지입니다')
}
}
// var 할아버지1 = new 할아버지('만덕')
class 아버지 extends 할아버지 {
constructor(fname, lname) {
super(fname, lname);
this.age = 50;
}
sayHi(){
super.sayHi()
}
}
아버지1.sayHi()
// 결과 : 콘솔창에 '할아버지입니다' 출력
// (아버지가 해당 메소드 가지고 있지 않으므로, 상위 class의 메소드를 사용
```
class 아버지 extends 할아버지 {
constructor(fname, lname) {
super(fname, lname);
this.age = 50;
}
sayHi(){
console.log('아버지입니다')
super.sayHi()
}
}
아버지1.sayHi()
// 결과 : 콘솔창에 '할아버지입니다' '할아버지입니다' 출력됨
// 아버지가 해당 메소드 가지고 있으므로 그 메소드 실행되면서,
// 동시에 상속받은 super.sayHi()메소드도 실행됨
c.f. Class 속성 지정 시 위치에 따른 차이
상위 Class의 생성자에 직접 부여된 속성들은
Extend Class가 사용하려면 super() 메소드와 함께 파라미터에 꼭 값을 명시해주어 야 하나,
상위 Class의 외부에 속성을 부여해준다면, 위 작업을 해주지 않더라도 Extend 클래스가 해당 속성 자유롭게 사용 가능하다.