Typescript中的抽象类、抽象方法和多态
typescript中的抽象类是提供其他类继承的基类,不能被实例化
用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现(即Animal类利用abstract关键字定义为抽象类和抽象方法,但是抽象方法要在其继承Animal类的Dog类中去实现)
这种做法类似多态:父类定义一个方法不去实现,让继承的子类去实现,每一个子类有不同的表现形式
抽象类和抽象方法
//Animal是一个抽象类,因为他使用了abstract关键字,里面含有一个eat()抽象方法
abstract class Animal {
name: string
constructor(name: string) {
this.name = name
}
abstract eat(): any //抽象方法前有abstract关键字,抽象方法不包含具体实现,要在继承的子类中实现
run() {
//非抽象方法
console.log('非抽象方法');
}
}
//Dog中继承了抽象类Animal,所以必须实现父类抽象方法,否则编译报错
class Dog extends Animal {
constructor(name: string) {
super(name)
}
eat() {
console.log(this.name + "吃肉")
}
}
var dog = new Dog("狗")
dog.eat()
多态
//多态:父类定义一个方法不去实现,让继承它的子类去实现 每一个子类有不同的表现 多态属于继承
class Animal {
name: string
constructor(name: string) {
this.name = name
}
eat(){
console.log('吃方法') //具体吃什么不知道,等待继承它的子类去实现
}
}
class Dog extends Animal {
constructor(name: string) {
super(name)
}
eat() {
return this.name + "吃肉"
}
}
class Cat extends Animal{
eat(){
return this.name+"吃老鼠"
}
}
// 每一个子类有不同的表现
// let p = new Cat('猫')
// console.log(p.eat()); 输出猫吃老鼠
let p = new Dog('狗')
console.log(p.eat()); //输出狗吃肉