TypeScript 中類的概念和 ES6 中原生類的概念大部分相同,但是也額外增加了一些新的特性。
類的基本使用
在上面的代碼中,我們使用關鍵字class定義了一個簡單的Person類。
類的繼承
TypeScrip 的繼承和
ES6
中的繼承是一樣的。關鍵字也是
extends
,比如我們這裡建立一個
Java
的類,然後繼承自
Person
類,在J
ava
類裡寫一個新的方法,叫做
sayWork
,具體代碼如下
類的重寫
重寫就是子類可以重新編寫父類裡邊的代碼。現在我們在
Java
這個類裡重寫父類的
sayHello()
方法.
super關鍵字的使用
在上面的代碼中,我們重寫了Person類的sayHello方法。但有的情況下,我們并不需要重寫方法,隻是想在原來的基礎上添加一些内容,這時候就可以使用
super
關鍵字,它代表父類中的方法。
類的通路類型
類的通路類型就是基于三個關鍵詞
private
、
protected
和
public
,也是三種通路類型。
public通路屬性
public
從英文字面的解釋就是
公共的
或者說是
公衆的
,在程式裡的意思就是允許在類的内部和外部被調用。
當我們執行上面的代碼的時候,之是以可以列印出typescript,是因為我們如果不在類裡對
name
的通路屬性進行定義,那麼它就會預設是
public
通路屬性。這就相當于下面的代碼:
現在修改一下代碼:
private通路屬性
private 通路屬性的意思是,隻允許再類的内部被調用,外部不允許調用
修改上面的例子,将name 屬性改成
private
這時候name屬性在類的内部使用不會提示錯誤,而外部使用
則
直接報錯。
protected通路屬性
protected 允許在類内及繼承的子類中使用。
現在修改上面的例子,将類内部的name的通路屬性換成protected,并添加一個子類
Teacher
類,繼承于
Person
。
這時候外部調用
name
的代碼會報錯,内部的不會報錯,和
private
一樣,在子類中使用
this.name也
是不報錯的。
類的構造函數
在上面的例子中,我們能在建立Person類的時候,給name屬性添加了一個預設值。如果我們不給name添加預設值,而是希望在new對象的時候,直接通過傳遞參數的方式給name指派,這個時候就需要用到構造函數了,構造函數的關鍵字是
constructor。
簡化上面的代碼:
類繼承中的構造器
在子類中使用構造函數需要用super()調用父類的構造函數: