前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TypeScript中,抽象类和接口的区别

TypeScript中,抽象类和接口的区别

作者头像
用户9914333
发布2022-07-22 14:37:57
1.1K0
发布2022-07-22 14:37:57
举报
文章被收录于专栏:bug收集

现在,对于TypeScript的使用越来越多,而要用TypeScript进行开发,不仅是语法上的不同,更是思想上的不同。

今天,就来分享下TypeScript中,抽象类与接口的特性及其区别;这是JavaScript中没有提及的概念。所以,更要对其了解,才能更好的在项目中应用它们。

目录:

1.什么是抽象类?

1.1 抽象类的特性!

2.什么是接口?

2.1 接口的特性!

3.抽象类和接口的区别?

1. 什么是抽象类?

抽象类,顾名思义,即类的抽象,从面向对象的角度来想,世界万物都可以用类来定义

(男人是个类,女人是个类,奔驰是个类,宝马也是个类),

那么抽象类又是类的抽象,

举个例子,刚说了男人,女人,它们是不是都有公共的一些的属性和行为方法,都有头,手,脚等属性,吃饭,睡觉等行为,

我们是不是可以进一步抽象出“人”这个类,然后让男人,女人去继承这个抽象类,这样他们就有了人的通用特性,

然后在抽象类基础上定义各自的特殊属性及方法

(比如上厕所,男人要进男厕,女人要进女厕)。

1.1 抽象类的特性!

  • 不可以被实例化
  • 含有声明但未实现的方法(也可以包含已实现的方法)
  • 一个类只能继承一个抽象类
  • 一旦有了抽象方法,就一定要把这个类声明为抽象类
  • 子类必须覆盖抽象类的抽象方法
代码语言:javascript
复制
abstract class Human {

  public head;
  public foot;
  public hand;

  //已实现的方法
  sleep() { 
        return "睡觉"
    }

  //已实现的方法 
  eat() { 
        return "吃饭"
    }
  //未实现的方法
  abstract toilet();
}



class Male extends Human{
//子类必须实现其声明未实现的方法
    toilet() { 
        return "上男厕所"
    }
}



class Female extends Human{
//子类必须实现其声明未实现的方法
    toilet() { 
        return "上女厕所"
    }
}


//不能被实例化
let man = new Human();// 报错 Cannot create an instance of an abstract class. constructor Human(): Human

2.什么是接口?

接口,它是对行为的抽象,而具体如何行动需要由子类去实现,接口的意义在于抽象,不拘细节,从而使同类事物在在同一高度具有通用性及可替代性。

2.1 接口的特性!

  • 不可以被实例化
  • 含有声明但未实现的方法
  • 一个类可以继承多个接口
  • 子类必须实现其声明未实现的方法
  • 所有成员都是默认Public的,因此接口中不能有Private成员
  • 子类必须实现接口的所有成员

看下面的例子,比如奔驰和宝马车有飞行和走水路的功能(其他的车没有)!那么我们可以通过接口来分别实现!

代码语言:javascript
复制
interface plane{
    fly(): string;
}

interface waterWay{
   waterWay(): string;
}

class Baoma implements plane,waterWay{
    fly(): string {
        return "宝马汽车实现了飞的技术"
    }
    waterWay(): string{
         return "宝马汽车实现了水路的技术"
     }
}

class Benci implements plane,waterWay{
    fly(): string {
        return "奔驰汽车实现了飞的技术"
    };
    waterWay(): string{
         return "奔驰汽车实现了水路的技术"
    }
}
let p = new plane();// 报错 'fly' only refers to a type, but is being used as a value here

这里飞的行为和走水路的行为并不是所有的汽车公有的特性(只有这两辆车有这功能,其他车没有这功能),所以通过接口去实现!

3. 抽象类和接口的区别?

  • 抽象类是类(事物)的抽象,抽象类用来捕捉子类的通用特性,接口是行为的抽象
  • 接口可以被多层实现,而抽象类只能单一继承
  • 接口不具备继承的任何具体特点,仅仅承诺了能够调用的方法
  • 抽象类更多的定义是在一系列紧密相关的类之间,而接口大多数是定义在关系疏松但都实现某一功能的类中

总结:

抽象类是对类本质的抽象,表达的是 is a 的关系,比如:male is a Human。抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类去实现。

接口是对行为的抽象,表达的是 like a 的关系。比如:Baoma like a plane(它有飞的功能一样可以飞),但其本质上 is a Car。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁、是如何实现的,接口并不关心。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档