ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-10 06:32:06  阅读:379  来源: 互联网

标签:关系 Typescript name void 接口 Human eat string


目录

类与接口的关系

今天我们介绍一下接口与类的关系。我们通过一个图来说明。

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

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 {

}

标签:关系,Typescript,name,void,接口,Human,eat,string
来源: https://www.cnblogs.com/Joannamo/p/14509287.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有