TypeScript入门:抽象类和多态
抽象类
抽象类: 只能被继承,不能被实例化的类,是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()
转载自:https://juejin.cn/post/6917600383615369230