抽象类

49 阅读1分钟

我们可以通过extends关键字实现继承,同时父类也可以实例化,但有些父类定义太宽泛了,不够语义化,它定义出来就是为了让子类继承的。所以不允许实例化,可以使用 abstract 关键字

abstract 抽象类

作用:放在 class 前,则该类不允许实例化。 放在 父类的方法 前,则该方法子类必须要重写

// 将 Animal 类 标记为抽象类
abstract class Animal {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  // 将 bark 方法 标记为 抽象方法
  //注:抽象方法不可以有具体实现,只能定义结构
    abstract bark(): void;
    
  //报错:方法“bark”不能具有实现,因为它标记为抽象。
  //abstract bark() {
  //  console.log("111");
  //}
  

}

class Dog extends Animal {
  constructor(name: string, age: number) {
    super(name, age);
    this.name = name;
    this.age = age;
  }

//父类定义了back抽象方法,所以此方法必须实现
  bark() {
    console.log("汪汪");
  }
  
//如果子类不定义 back 方法,则报错
//报错:非抽象类“Dog”不会实现继承自“Animal”类的抽象成员“bark”。
}

const d = new Dog("小狗", 2);
const a = new Animal("动物", 5);    //报错:无法创建抽象类的实例。