抽象类
定义
使用abstract关键字,只能被继承,不能被实例化的类.
好处
抽离出一些事物的共性,有利于代码的复用和扩展
注意
父类中定义一个方法,可以有具体的实现,这样子子类就不用实现了,实现方法的复用。
abstract class Animal{
eat() {
console.log('eat') //实现
}
abstract sleep() : void //抽象方法。不实现,好处是:明确的知道子类有其他的实现
}
class Dog extends Animal{
constructor(name:string){
super()
this.name = name
}
name: string
run() {}
sleep(){
console.log('不在父类中实现,在子类中实现')
}
}
let animal = new Animal() //报错,抽象类不可被实例化
let dog = new Dog('hahhaha')
dog.eat() // 子类中调用父类的方法
抽象类还可以实现多态
class Cat extends Animal{
sleep() {
console.log('Cat sleeps')
}
}
let cat = new Cat()
let animals : Animal[] = [dog,cat]
animals.forEach(i => {
i.sleep() //判断具体的实例是哪一种实例,执行哪一种方法,实现多态
})
特殊的ts类型:this
类的成员方法可以直接返回一个this,这样子可以很方便的实现链式调用
在继承的时候this类型也可以表现出多态,这里的多态指:
this可以是父类型,也可以是子类型
class words{
step1(){
return this
}
step2(){
return this
}
}
new words().step1().step2()
class ciildWords extends words {
next(){
return this
}
}
new ciildWords().next().step1().next().step2() //保持了父类和子类接口的连贯性
网友评论