TypeScript基本知識點整理——類

 

1. 訪問修飾符

public:公共修飾符

注意:

表示屬性或方法都是公有的,在類的內部,子類的內部,類的實例都能被訪問,默認情況下,爲public

class People {    public name : string     constructor (name:string) { //構造函數必須寫        this.name = name    }    public say () :void {        console.log('你好')    }}

private 私有修飾符

注意:

表示在當前類中可以訪問,子類,外部類不可以訪問

class People {    private name : string     constructor (name:string) { //構造函數必須寫        this.name = name    }    private say () :void {        console.log('你好')    }}

protected 保護類型

注意:

表示在當前類中和子類中可以訪問,外部類不可以訪問

class People {    protected name : string     constructor (name:string) { //構造函數必須寫        this.name = name    }    protected say () :void {        console.log('你好')    }}

注意:

TypeScript 只做編譯時檢查,當你試圖在類外部訪問被 private 或者 protected 修飾的屬性或方法時,TS 會報錯,但是它並不能阻止你訪問這些屬性或方法。

readonly 只讀修飾符

注意:

表示某個屬性是隻讀的,不能被修改

class People {    readonly name : string     constructor (name:string) { //構造函數必須寫        this.name = name    }}

2. 聲明類

class People {    name : string //默認爲public    age : number    constructor (name:string, age:number) { //構造函數必須寫        this.name = name        this.age = age    }    say () :void {        console.log('你好')    }} const HH : People = new People('含含', 21)console.log(HH.name)console.log(HH.age)HH.say()

3. 類的繼承

class Student extends People {     cm : number    constructor (name:string, age:number, cm:number) {        super(name, age) //super 繼承父類的構造函數,並向構造函數傳參,super必須寫在第一行        this.cm = cm    }    work () : void {        console.log('學習')    }} const  stu1 : Student = new Student('liu', 22, 175)console.log(stu1.name)console.log(stu1.age)console.log(stu1.cm)stu1.say()stu1.work()

4. 靜態屬性和靜態方法

注意:

靜態方法和靜態屬性必須使用類名調用

靜態屬性和靜態方法在實例化之前就已經存在

注意:靜態方法調用不了實例化方法和實例化屬性,因爲靜態域加載是在解析階段,而實例化是在初始化階段,(java原理),所以靜態方法裏面不能調用本類的方法和屬性,可以調用靜態屬性和靜態方法

class People {    static name1 : string = '靜態屬性';    static say () :void {        console.log('靜態方法')    }}console.log(People.name1)People.say()

5. 多態

多態---->重寫方法

父類定義一個方法不去實現,讓繼承它的子類去實現,每個子類的該方法有不同的表現

class Animal {    name : string    constructor (name:string) {        this.name = name    }    eat () : void {//讓它的子類去實現不同的eat方法    }} class Laohu extends Animal {    constructor (name:string) {        super(name)    }    eat () : void {        console.log(`${this.name}吃肉!`)    }} class Laoshu extends Animal {    constructor (name:string) {        super(name)    }    eat () : void {        console.log(`${this.name}吃糧食!`)    }}const laohu : Laohu = new Laohu('老虎')laohu.eat()const  laoshu : Laoshu = new Laoshu('老鼠')laoshu.eat()

6. 類和接口

注意:

類可以實現(implement)接口。通過接口,你可以強制地指明類遵守某個契約。你可以在接口中聲明一個方法,然後要求類去具體實現它。

接口不可以被實例化,實現接口必須重寫接口中的抽象方法

interface Play {    plays (difang:string) : void;} class Playy implements Play {    plays(difang: string): void {        console.log(`我們要去${difang}玩!!!`)    }} const pl : Playy = new Playy();pl.plays('北京')

注意:類和接口的區別

類可以實現(implement)多個接口,但只能擴展(extends)自一個抽象類。

抽象類中可以包含具體實現,接口不能。

抽象類在運行時是可見的,可以通過 instanceof判斷。接口則只在編譯時起作用。

接口只能描述類的公共(public)部分,不會檢查私有成員,而抽象類沒有這樣的限制。

7. 抽象類和抽象方法

注意:

用abstract關鍵字定義抽象類和抽象方法,抽象類中的抽象方法不包含具體實現並且必須在派生類(抽象類的子類)中實現

抽象類:它是提供其他類繼承的基類,不能直接被實例化,子類繼承可以被實例化

abstract修飾的方法(抽象方法)只能放在抽象類裏面

抽象類和抽象方法用來定義標準(比如定義標準爲:抽象類Animal有抽象方法eat,要求它的子類必須包含eat方法)

abstract class People {    name : string    constructor (name:string) {        this.name = name    }    abstract eat (food:string) :void;//抽象方法不包括具體實現,並且必須再派生類中實現} class Stud1 extends People {//抽象類的子類必須實現抽象類中的抽象方法    constructor (name:string) {        super(name)    }    eat(food: string): void {        console.log(`我愛吃${food}`)    } }const stu11 : Stud1 = new Stud1('liu')stu11.eat('麪條')

總結

      public、private、protected、Class、interface、abstract 、多態,不禁感嘆,前後端的差異真的越來越小了。

    下一篇文章會出關於TypeScript的接口的知識點,敬請期待。

 

 

識別二維碼,更多前端內容

 

你點的每個贊,我都認真當成了喜歡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章