【Typescript】类与接口的关系(8)

目录

类与接口的关系

今天我们介绍一下接口与类的关系。我们通过一个图来说明。
【Typescript】类与接口的关系(8)

从这个图中我们可以看接口与类的关系,首先接口之间是可以相互继承的,这样能实现接口的复用。
类也可以相互继承,可以实现方法与类的复用。
接口是可以通过类来实现的,但是接口只能约束类的公有成员。另外,接口也可以抽离类的成员,抽离的时候会包括公有成员,私有成员,和受保护的成员。

interface Human {
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    name: string
    eat() {}
}

接口的特征

接口只能约束类的公有成员

interface Human {
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    private name: string // 这里这样写,这个类会报错, Property 'name' is private in type 'Asia' but not in type 'Human'.
    eat() {}
}

接口不能约束类的构造函数

interface Human {
    // new (name: string): void // 这里会提示实现了错误的类的接口,  Type 'Asia' provides no match for the signature 'new (name: string): void'.
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    name: string // 这里这样写,这个类会报错, Property 'name' is private in type 'Asia' but not in type 'Human'.
    eat() {}
}

接口的继承

接口可以像类一样继承,并且一个接口可以继承多个接口。

interface Human {
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    name: string 
    eat() {}
}

interface Man extends Human {
    run(): void
}

interface Child {
    cry(): void
}

interface Boy extends Man, Child {}

let boy: Boy = {
    name: '',
    run() {},
    cry() {},
    eat() {}
}

接口还可以继承类

class Auto {
    state = 1
}

interface AutoInterface extends Auto {

}

class C implements AutoInterface {
    state = 1
}

class Bus extends Auto implements AutoInterface {

}
上一篇:天元MegEngine训练推理


下一篇:台州学院we are without brain 训练 后缀数组