类和接口
门是一个类,防盗门是门的子类。如果防盗门有一个报警器的功能,我们可以简单的给防盗门添加一个报警方法。这时候如果有另一个类,车,也有报警器的功能,就可以考虑把报警器提取出来,作为一个接口,防盗门和车都去实现它:
interface Alarm { alert(): void; } class Door { } class SecurityDoor extends Door implements Alarm { alert() { cc.log('SecurityDoor alert'); } } class Car implements Alarm { alert() { cc.log('Car alert'); } } let myCar: Car = new Car(); myCar.alert();
一个类可以实现多个接口:
interface Alarm { alert(): void; } interface Light { lightOn(): void; lightOff(): void; } class Car implements Alarm, Light { alert() { cc.log('Car alert'); } lightOn() { cc.log('Car light on'); } lightOff() { cc.log('Car light off'); } } let myCar: Car = new Car(); myCar.alert(); myCar.lightOff();
//接口继承接口,Lx2有了Lx1的方法 interface Lx1{ fun1(): void; } interface Lx2 extends Lx1{ fun2(): void; }
//接口继承类 class Point{ x: number; y: number; constructor(x: number, y:number){ this.x = x; this.y = y; } } interface Point3D extends Point{ z: number; }
//接口继承类,静态属性和方法继承不了 class Point{ static k:number; static testPoint(){ } x: number; y: number; constructor(x: number, y:number){ this.x = x; this.y = y; } testFun1(){ } } interface Point3D extends Point{ z: number; } let temp1: Point3D = {x: 1, y: 2, z: 3, testFun1: function fun2(){ }}; temp1.x; temp1.y; temp1.testFun1(); temp1.k; //报错,因为是静态属性不能继承