TypeScript入门:抽象类和多态

6,140 阅读1分钟

抽象类

抽象类: 只能被继承,不能被实例化的类,是ts对es的扩展 使用abstract定义抽象类

abstract class Animal {
  // 实现具体的方法,方便子类复用
  eat() {
    console.log('eat')
  }
  // 声明抽象的方法,让子类去实现
  abstract sleep(): void
}

let animal = new Animal() // 报错,无法创建实例

class Dog extends Animal {
  constructor(name: string) {
    super()
    this.name = name
  }
  name: string
  run() {}
  sleep() {
    console.log('dog sleep')
  }
}
let dog = new Dog('wangwang')
dog.eat() // eat

使用抽象类的好处就是可以抽离出事物的共性,有利于代码的复用和扩展

多态

多态:在父类中定义一个方法,在子类中有多个实现,在程序运行的时候,根据不同的对象执行不同的操作,实现运行时的绑定。

class Cat extends Animal {
  sleep() {
    console.log('cat sleep')
  }
}

let cat = new Cat()

let animals: Animal[] = [dog, cat]
animals.forEach(i => {
	i.sleep()
})

this的多态

class WorkFlow {
  step1() {
    return this
  }
  step2() {
    return this
  }
}
new WorkFlow().step1().step2()

这里this的多态指的是:this既可以是父类型也可以是子类型,保证父类子类接口调用的连贯性

class Myflow extends WorkFlow {
  next() {
    return this
  }
}
new Myflow().next().step1().next().step2()