【Typescript】ts中的抽象类、抽象方法和多态

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()); //输出狗吃肉

おすすめ

転載: blog.csdn.net/m0_63779088/article/details/126471350