我们已经知道,可以使用接口来定义对象的类型
今天主要来介绍接口对类的一部分进行抽象
类实现接口
实现是面向对象中的一个重要概念,一般来讲,一个类只能继承自另一个类,有时候不同类之间会有一些共同的特性,这个时候就可以把共性提取成接口。
举例来说,门是一个类,防盗门是门的子类。如果防盗门有一个报警器的功能,我们可以简单的给防盗门添加一个报警方法。这时候如果有另一个类,车,也有报警器的功能,就可以考虑把报警器提取出来,作为一个接口,防盗门和车都去实现它:
interface Alarm {
alert(): void;
}
class Door {
}
class SecurityDoor extends Door implements Alarm {
alert() {
console.log('SecurityDoor alert');
}
}
class Car implements Alarm {
alert() {
console.log('Car alert');
}
}
接口与接口之间的继承
interface Alarm {
alert(): void;
}
interface LightableAlarm extends Alarm {
lightOn(): void;
lightOff(): void;
}
可以看出LightableAlarm继承了Alarm,拥有继承来的alter方法,也有两个新方法。
接口继承类
在常见的面向对象语言中,接口是不能继承类的,但在ts中是可以的
class Num {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
}
interface NumIn extends Point {
z: number;
}
let NumIn: NumIn = {x: 1, y: 2, z: 3};
在我们创建Num类时,除了创建了一个名为Num的类之外,同时也创建了一个名为Num的类型。
可以把Num当成一个类在用,也可以当成一个类型使用。