- 关键字abstract
- 抽象类不允许被实例化,抽象类的存在只为了向子类服务
- 抽象类中包含抽象属性/方法,和普通属性/方法
- 被抽象的属性/方法不允许拥有具体的内容
- 子类如果不是抽象类,就必须将所有抽象父类的方法/属性具体化
abstract class Animal { //定义一个抽象类
abstract name: string //抽象一个name属性,但是name属性不允许有值,也不允许被 constructor 赋值
abstract eat(): void //抽象一个方法,方法不允许有内容,只允许标注返回值类型
run(): void { //这是一个普通方法
}
}
class Dog extends Animal {
//因为Dog不是抽象类所以必须有name和eat();第5条
/*
只能这样赋值,不允许用constructor(name: string) {
this.name = name
}因为父类没有用是抽象的,没用constructor赋予具体内容
*/
name: string = '狗'
gender: string
constructor(gender: string) {
super() //此处super中也不允许有父类的抽象属性
this.gender = gender
}
eat(): void {
console.log('狗吃饭');
}
}
const ani: Animal = new Animal() //不允许(第2条)
const dog: Dog = new Dog('公')
console.log(dog.name); //狗
dog.eat()