class Parent {
constructor(protected _name: string, private _age: number) {
console.log('부모 생성자 입니다.');
}
public print(): void {
console.log(`name is ${this._name}, age is ${this._age}`);
}
}
class Child extends Parent {
// public _name = 'Mark'; // 부모에서 접근제어자가 protected 였지만 자식에서 바꿀수 있다.
public gender = 'male'; // 자식만의 프로퍼티
constructor(age: number) {
super('Mark', age); // 자식 생성자에서 super 선 호출!!
console.log('자식 생성자 입니다.');
}
}
// const c = new Child('malza', 29); // 자식 생성자가 별도로 없을 때 부모 생성자 호출.
const c = new Child(5); // 자식 생성자 만들어 줬다면 부모 생성자와 자식 생성자 모두 호출된다.
// print 는 override 되었다.
c.print(); // name is Mark, age is 5
console.log(c); // Child { _name: 'Mark', _age: 5, gender: 'male' }
const p = new Parent('malza', 29); // 부모 생성자 호출
p.print(); // name is malza, age is 29
console.log(p); //Parent { _name: 'malza', _age: 29 }