- 關鍵字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()