TypeScript 中的类与接口

interface 与 class 的区别

typescript 有接口的概念,这个接口和类有什么关系吗?
interface: 接口只声明成员方法,不做实现。
class: 类声明并实现方法

  1. interface 只是定义了这个接口会有什么,但是没有告诉你具体是什么。
1
2
3
4
5
interface Point {
lng: number;
lat: number;
sayPosition(): void;
}

注意:Point interface 中包含数值类型的经纬度和一个 sayPosition 函数,但是具体内容没有定义,需要你自己在子类中实现

  1. class 是完整的实现
1
2
3
4
5
6
7
8
9
class Point {
constructor(lng, lat) {
this.lng = lng;
this.lat = lat;
}
sayPosition() {
console.log("point:", this.lng, this.lat);
}
}

注意点

  1. 接口不能实现接口或者类,所以实现只能用于类身上,即类可以实现接口或类
  2. 接口可以继承接口或类
  3. 类不可以继承接口,类只能继承类
  4. 可多继承或者多实现

extends 与 implement

在 typescript 上遇到过实例化对象的两种写法:implementextendsextends 很明显就是 ES6 里面的类继承,那么 implement 又是做什么的呢?它和 extends 有什么不同?
extends 是继承父类,只要那个类不是声明为 final 或者那个类定义为 abstract 的就能继承。
java 中不支持多重继承,但是可以用接口来实现,这样就要用到 implements,继承只能继承一个类,但 implements 可以实现多个接口,用逗号分开就行了,如:class A extends B implements C,D,E

  1. implements

implements 实现,一个新的类,从父类或者接口实现所有的属性和方法,同时可以重写属性和方法,包含一些新的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A {
public name: string = "";
}

class B {
public user: string = "";
}

class Imp implements A, B {
name = "123";
user = "";
}

class Imps implements Imp {
name = "123";
user = "";
}
  1. extends

extends 继承,一个新的接口或者类,从父类或者接口继承所有的属性和方法,不可以重写属性,但可以重写方法。但是要注意的是,如果父类是抽象类,内部有抽象的方法,子类在 extends 的时候,如果子类不是抽象类,那么子类就一定要对父类中的抽象方法进行重写。但如果子类也是抽象类,则可以不可考虑重写。extends 支持子类,孙类……即可以继承多代。

Java 版的 implements 与 extends

Java 作为老牌面向对象语言,对比学习下,看下差异点。

  1. 同上,接口不能实现接口或者类,类不可以继承接口,类只能继承类,可多继承或者多实现
  2. 与 TS 有所区别的是,接口不能继承类,接口只能继承接口