TypeScript(6) 物件繼承

TypeScript(6) 物件繼承

了解物件可以有私有/保護屬性之後,接下來我們要來看物件的繼承,繼承可以讓一個全新的類別被實體化(new 出來)的時候,就能夠直接取用某個類別的方法。通常我們稱被繼承的類別為「父類別」,繼承別人的物件稱為「子類別」。

題外話,早期 Javascript 必須透過 property 來達到繼承,但 ES6 之後也有類別(class)繼承的做法。

假設我今天想要寫一隻程式來記錄動物的行為,於是我創造了一個 Animal 類別,裡面有一個 move 方法,可以描述某個動物移動了幾步。

class Animal {   
    name:string;
    constructor(theName: string) { this.name = theName; }
     move(meters: number) {
        console.log((this.name + " moved " + meters + "m."))
    }
  }

但動物有很多種,我想細分動物的種類,也一樣共用描述行為的這些方法,該怎麼做到?這時候就需要用到繼承,Typescript 裡面使用 extends 語法來進行繼承。

class Snake extends Animal {  

    constructor(name: string) { 
        super(name);  
    }

    move() {  
        super.move(5);  
    }
}

並且使用 super 來取得父類別的屬性以及方法(也就是 Animal ),且記得如果在子類別有使用建構子,一開始要先使用spuer()呼叫父類別建構子,否則會報錯。

在Snake裡面如果寫入跟父類別 Animal 相同的方法,我們就稱這個動作為「複寫」(覆蓋掉父類別方法),但是以上述程式碼為例,就算不複寫,snake 一樣可以直接調用 move 方法(因為繼承。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×