当我们创建了一个父类Animal和子类Dog的时候,我们更多的是希望通过new 子类来创建对象,而不是直接通过父类去创建对象。
一、使用abstract创建抽象类
以abstract开头的类就是抽象类:
abstract class 类名 { }
抽象类和其他类的区别不大,只是不能用来创建对象。
抽象类就是专门被用来继承的类。
二、使用abstract创建抽象方法
我们在使用继承父类的时候更多的时候是希望子类中自己对方法进行定义,这时候就可以使用抽象方法。
以abstract开头的方法就是抽象方法,且没有方法体,返回为空:
abstract 方法名( ) : void;
抽象方法只能定义在抽象类中,且子类必须对抽象方法进行重写。
// 父类Animal
abstract class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
abstract bark(): void;
}
// 子类Dog
class Dog extends Animal {
bark() {
console.log(this.name + "汪汪汪");
}
}
// 子类Cat
class Cat extends Animal{
bark() {
console.log(this.name + "喵喵喵");
}
}
let dog = new Dog("旺财");
dog.bark(); // 打印:旺财汪汪汪
let cat = new Cat("咪咪");
cat.bark(); // 打印:咪咪喵喵喵
如果我们不对父类中的抽象类进行重写,就会出现如下错误: