一分钟看完,TS中的类的继承以及抽象类

3,610 阅读2分钟

前言

上篇文章中,我们介绍了TS中的类和修饰符,这篇我们继续了解TS中的类相关的两个东西,分别是类的继承以及抽象类

类的继承

我们知道js中有继承,最开始js是使用函数来模拟实现类的,一直到ES6出现,才开启了class以及extends 等相关关键字的使用。那为什么会有继承呢? 事实上,继承的好处在于,可以更好的重用代码,以及后期更好的维护代码

TS中的继承ES6中的类的继承极其相识,子类可以通过extends关键字继承一个类 例如:

class Person{
  name:string;
  age:number;
  constructor(name,age){
    this.name = name;
    this.age = age;
  }
}
class student extends Person{
  score:number;
  constructor(name,age,score){
    super();
    this.score =  score;
  }
}

可以看见,跟ES6一样,子类构造函数必须加上super()执行父类的构造constructor函数

所以,大家常常说,一个子类实例,同时也是父类的实例

继承的格式:

class A {}
class B extends A {
  constructor() {
    super();
  }
}

如上,B继承A,那B被称为父类(超类),A被称为子类(派生类) 子类实例是可以继承父类所有的publicprotected的属性和方法

除了继承,面向对象还有一个特征:多态 js和ts中多态其实很常见,可以理解为多种状态,比如代码在运行时才能决定具体执行哪个函数

抽象类

抽象就是指不具体的,所以抽象类就是指不具体的类。所以抽象类自身没有什么功能,通常作为父类类使用

定义一个抽象类,使用abstract class两关键字定义

abstract class A{
  abstract fn():number;
}

抽象类规定了所有继承自它的非抽象子类必须实现它的所规定的功能和相关操作,否则会报错

class B extends A{
  constructor(){
    super();
  }
  fn():number{
    return 1
  }
}

需要注意,抽象类仅仅作为基类,不能new

let b = new B();//可以
let a = new A();//报错