TypeScript筆記 (4) — Class

在介紹 Class 之前,必須先認識什麼是物件導向

物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式設計典範,同時也是一種程式開發的抽象方針。它可能包含資料特性程式碼方法。物件則指的是類別(class)的實例。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。(引用至MDN)

簡單來說我們可以透過類別實作出不同的物件(實例),以生產手機來說,我們可以設計一個手機類別,這個類別擁有打電話、上網、拍照等功能,透過這個類別創建出來的每台手機(物件)都可以擁有這些功能,假設今天要再多新增一個付款功能,只要新增在類別上即可,不需要每部手機逐一新增,在程式的管理上會更加靈活

Class 類別

Class 可以比喻做一個設計圖, 讓我們能夠基於 Class 創建出不同的物件,以下面的例子來說 Class User 為設計圖,而 user1 ~ user3 都是透過 User 創建出來的物件

Constructor 建構子

如果想要基於相同的 Class 創建出不同屬性的物件,可以透過 constructor 傳入不同的參數,就會產生出不同的實例,以上述的例子來說,在 new 新物件的時候傳入的參數就會被 constuctor 接收,讓每個實例(user)擁有不同的屬性

Interface 介面

介面可以約束 Class 要實作的屬性和方法有哪些,實作方式由開發者自己決定,好比說公司要求員工要採購雞蛋,不管是網路購物或是去傳統市場購買都可以,方法由員工自行決定,只要買到蛋就好了

如果沒有依照 interface 實作所有的內容就會跳警告

extends 繼承

子類別用 extends 繼承父類別,讓子類別可以直接使用父類別的方法或屬性,如果子類別宣告與父類別相同的函式名稱,則會覆寫父類別的方法

super

使用 super.method()就可以讓子類別調用父類別的方法,如果是在 constructor 裡面執行 super(),代表子類別執行父類別的 constructor 方法

Abstract class (抽象類別)

抽象類別規定繼承的子類別必須實作抽象方法,抽象類別是不能被 new 的(建立實例)

public 公開

如果沒有在屬性前面加上修飾詞預設就會是 public,也可以手動標記修飾詞,public 允許外部存取,new 出來的實例可以取得 public 屬性

private 私有

private 代表屬性僅能在 Class 內部取得,new 出來的實例無法取得私有變數,這樣可以必免不小心被外部的程式修改

假如外部程式有取得 private 屬性的需求,可以寫一個函式回傳 private 屬性

protected 受保護的

跟 private 一樣無法在外部程式取得,唯有子類別可以讀取


static 靜態

修飾詞為 static 的屬性和方法被稱作靜態屬性和靜態方法,不需要 new 出新的物件,可以直接透過 Class 取得或呼叫

static 的方法僅能取得 static 的屬性,public、 private、 protected 都是取不到的

參考資料:

TypeScript | 從 TS 開始學習物件導向  — Class 用法

TypeScript | 從 TS 開始學習物件導向  — Interface 用法