오버라이딩은 부모 클래스에 정의된 메서드를 자식 클래스에서 새로 구현하는 것을 말한다. 오버라이딩할 대상이 있는 부모 클래스를 오버라이든 클래스(overridden class)라고 한다.
오버라이든 클래스에는 오버라이든 메서드(overridden method)가 존재한다. 오버라이든 메서드는 파생 클레스에 정의된 메서드에 오버라이딩되어 오버라이딩 메서드로 새롭게 재정의된다.
오버라이딩으로 메서드가 재정의되려면 기본적으로 오버라이든 메서드와 오버라이딩 메서드는 서로 이름이 같아야 한다. 그리고 다음 두 조건을 만족해야 한다.
class Gun {
shot(times: number) {
for(let i = 0; i < times; i++) {
console.log('빵야');
}
}
}
class RailGun extends Gun {
shot(times2: number): void {
for(let i = 0; i < times2; i++) {
console.log('피융');
}
}
}
let railgun = new RailGun();
railgun.shot(3);
오버로딩은 메서드의 이름은 같지만, 타입은 다르게 정의하여 사용하는 방법이다. 오버로딩을 사용하기 위해서는 함수명과 반환 타입, 매개변수의 순서가 같아야 한다. (매개변수가 추가되는 것은 괜찮다.)
function typeCheck(value: number): void;
function typeCheck(value: string): void;
function typeCheck(value: number | string): void {
if (typeof value === 'number') {
console.log('숫자 : ', value);
} else {
console.log('문자열 : ', value);
}
}
typeCheck(100);
typeCheck('abc');