TS之靜態屬性、靜態方法 & 抽象類、抽象方法


1.靜態屬性&靜態方法

class Person {
  public name: string;    // 保護屬性
  public age: number = 20;

  static sex: string = "男";
  constructor(name: string) {
    this.name = name;
  };

  run() {  // 實例方法
    console.log(`${this.name}在奔跑`);
  }
  work() {
    console.log(`${this.name}在工作`);
  }

  static print() {  //靜態方法
    console.log('print方法');

    console.log('print方法' + this.age);  // 報錯,靜態方法里無法直接調用當前類屬性(只能調用靜態屬性)this.age是undefined
    console.log('print方法' + this.sex);

  }
}

let p = new Person("張三")
// 調用實例方法
p.run();
// 調用靜態方法
Person.print();

 2.多態 ——一個函數,在不同情況下表現出不同的狀態,就稱為多態

包括兩種情況:

  • 重載(overload):一個函數,根據傳入的實參值不同,選擇執行不同的邏輯
  • 重寫(override):子對象中定義了和父對象中同名的方法,當使用這個方法時,使用的時子對象這個方法,而不會使用父對象中的方法

以重寫為例:

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 {
  constructor(name: string) {
    super(name)
  }
  // 字類改寫
  eat() {
    return this.name + "吃魚"
  }
}

 

 

2.抽象類&抽象方法

(1)抽象類

標准:一個類要求它的字類必須包含指定方法,它是提供其他類繼承的基類,不能被直接實例化。

定義抽象類:

abstract class Animal {
  abstract eat():any ;
}

let a=new Animal();  // 報錯:無法創建抽象類的實例

 

 (2)抽象方法

抽象方法在子類里面必須實現

// 父類
abstract class Animal {
  public name: string;
  constructor(name: string) {
    this.name = name;
  }

  abstract eat(): any;
}
// 子類Dog
class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }
  // 抽象類的子類必須實現抽象類里面的抽象方法
  eat() {
    console.log(this.name + '在吃肉');
  }
}
let d = new Dog('達摩');
d.eat();

// 子類Cat
class Cat extends Animal {       
  constructor(name: string) {
    super(name);
  }
}

 

子類Cat不實現eat()方法,會報錯:非抽象類“Cat”不會實現繼承自“Animal”類的抽象成員“eat”,即子類Cat不會自動繼承父類的方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM