# 类与接口
类与接口
前几篇博客说过,接口(Interfaces)可以用于对「对象的形状(Shape)」进行描述。现在主要介绍接口的另一个用途,对类的一部分行为进行抽象。
类实现接口
实现(implements)是面向对象中的一个重要概念。一般来讲,一个类只能继承自另一个类,有时候不同类之间可以有一些共有的特性,这时候就可以把特性提取成接口(interfaces),用 implements
关键字来实现。这个特性大大提高了面向对象的灵活性。
基本案例
interface ISing {
// 这个方法是没有任何实现的
sing();
}
interface IDance {
// 这个方法是没有任何实现的
dance();
}
class P implements ISing { // 人 会唱歌、跳舞
sing() {
console.log('人会唱歌');
}
}
class A implements ISing { // 动物 会唱歌、跳舞
sing() {
console.log('动物会唱歌');
}
}
const per = new P();
const an = new A();
per.sing();
an.sing();
看一下编译完成后的执行结果:
如果需要通过多个接口约束类,只需要使用逗号分割即可:
interface ISing {
// 这个方法是没有任何实现的
sing();
}
interface IDance {
// 这个方法是没有任何实现的
dance();
}
class P implements ISing, IDance { // 人 会唱歌、跳舞
dance() {
console.log('人跳舞')
}
sing() {
console.log('人会唱歌');
}
}
class A implements ISing, IDance { // 动物 会唱歌、跳舞
dance() {
console.log('动物跳舞')
}
sing() {
console.log('动物会唱歌');
}
}
const per = new P();
const an = new A();
per.sing();
an.sing();
per.dance()
an.dance()
看一下编译完成后执行结果:
接口继承
接口与接口之间可以是继承关系:
// 接口继承接口
interface IRun {
run()
}
interface IWalk {
walk()
}
// 接口继承其他接口
interface IActive extends IRun, IWalk {}
class I implements IActive {
run() {
console.log("run");
}
walk() {
console.log("walk");
}
}
const i = new I();
i.run()
i.walk()
编译完成后,看一下执行结果:
接口继承类
常见的面向对象语言中,接口是不能继承类的,但是在 TypeScript 中却是可以的。
为什么 TypeScript 会支持接口继承类呢?实际上,当我们在声明一个类时,除了会创建一个类之外,同时也创建了一个类型(实例的类型)。所以我们既可以将它当做一个类来用(使用 new 类名
创建它的实例),也可以将它当做一个类型来用(使用 : 类型
当作参数的类型)
案例:
// 创建一个类
class NewPerson {
name: string
constructor(name: string) {
this.name = name
}
sayHi(){
console.log(`Hi, ${this.name}!`) // 正确
}
}
// 接口继承类
interface IPerson extends NewPerson {
age: number
}
// 实例化对象
let person1: IPerson = {
name: '我是ed.',
age: 25,
sayHi() {
console.log(`你好,${this.name}! 今年${this.age}岁了!`)
}
}
person1.sayHi()
保存编译,查看一下运行结果:
【版权声明】本博文著作权归作者所有,任何形式的转载都请联系作者获取授权并注明出处!
【重要说明】博文仅作为本人的学习记录,论点和观点仅代表个人而不代表技术的真理,目的是自我学习和有幸成为可以向他人分享的经验,因此有错误会虚心接受改正,但不代表此刻博文无误!
【博客园地址】叫我+V : http://www.cnblogs.com/wjw1014
【CSDN地址】叫我+V : https://wjw1014.blog.csdn.net/
【Gitee地址】叫我+V :https://gitee.com/wjw1014
【重要说明】博文仅作为本人的学习记录,论点和观点仅代表个人而不代表技术的真理,目的是自我学习和有幸成为可以向他人分享的经验,因此有错误会虚心接受改正,但不代表此刻博文无误!
【博客园地址】叫我+V : http://www.cnblogs.com/wjw1014
【CSDN地址】叫我+V : https://wjw1014.blog.csdn.net/
【Gitee地址】叫我+V :https://gitee.com/wjw1014
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-12-26 python3 读取串口数据
2018-12-26 数据结构知识点大全