类和接口

门是一个类,防盗门是门的子类。如果防盗门有一个报警器的功能,我们可以简单的给防盗门添加一个报警方法。这时候如果有另一个类,车,也有报警器的功能,就可以考虑把报警器提取出来,作为一个接口,防盗门和车都去实现它:

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;     //报错,因为是静态属性不能继承

 

posted @ 2020-12-13 19:29  小翔momo  阅读(80)  评论(0编辑  收藏  举报