TypeScript(類—繼承—多態)


一、類的定義(class)

 

  類(class)這個概念來源於OOP(Object Oriented Programming),也就是面向對象編程,OOP是一種計算機編程架構,其有着封裝,繼承,多態三種特性。而類在OOP中是實現信息封裝的基礎。類是一種用戶定義類型,也稱類類型。每個類包含數據說明和一組操作數據或傳遞消息的函數。類的實例稱為對象。

 

  es5:

        function Person(name) { this.name = name; this.run = function () { console.log(this.name) } } let p = new Person('李四') p.run()  // 李四

  ts:

class Person{ name:string; /* 屬性,前面省略public關鍵詞 */ constructor(name:string){ /* 構造函數,實例化類的時候觸發的方法 */
        this.name=name } get():void{ console.log(this.name) } set(name:string):void{ this.name=name console.log(this.name) } } let p=new Person('李四') p.get() /* 李四 */ p.set('張三')     /* 張三 */ p.get() /* 張三 */

 

二、繼承(extends、super)

class Futher { name: string; constructor(name: string) { this.name = name } run(): void { console.log(this.name) } } let p1 = new Futher('張三') p1.run() // 張三
class Child extends Futher { constructor(name: string) { super(name) /* 初始化父類的函數 */ } work(): void { console.log(this.name) } } let p2 = new Child('李四') p2.run() // 李四,子類繼承父類的方法,若子類存在該方法則優先使用子類的方法
p2.work()   // 李四,子類可以拓展自己的方法

 

三、類里的修飾符(public、protected、private)

  public:公有,不加修飾符默認公有。類里、子類、外部可以訪問

  protected:保護類型,類里、子類可以訪問,類外不可訪問

  private:類里可以訪問,子類、外部不可訪問

class Futher { public name: string; /* 公有 */ protected age: number | null | undefined;    /* 保護 */ private phone: number | null | undefined;    /* 私有 */ constructor(name: string, age?: number, phone?: number) { this.name = name this.age = age this.phone = phone } run(): void { console.log(this.name, this.age, this.phone) } } class Child extends Futher { constructor(name: string, age: number, phone?: number) { super(name, age, phone) /* 初始化父類的函數 */ } work(): void { console.log(this.name, this.age) /* console.log(this.name,this.age,this.phone) */  /* 子類添加private報錯 */ } } let p1 = new Futher('李四', 18, 123456) let p2 = new Child('張三', 20, 654321) p1.run() /* 李四 18 123456,類里可以訪問public\protected\private */ p2.work()/* 張三 20,子類可以訪問public\protected,子類訪問private報錯 */ console.log(p1.name) /* 張三,李四,外部可以訪問public */
/* console.log(p1.name,p1.age,p1.age)*/ /* error,外部訪問protected\private報錯 */

 

四、靜態方法(static)

class Person { public name: string; /* 公有 */ static sex:string='男'; /* 靜態屬性 */ constructor(name: string) { this.name = name } run(): void {   /* 實例方法,實例后調用 */ console.log(this.name) } static work():void{ /* 靜態方法,不能直接調用類里的屬性 */
        /* console.log(this.name) */  /* error,不能直接調用類里的屬性 */ console.log(Person.sex) /**/ } }

 

五、多態

  多態:父類定義一個方法不去實現,讓繼承他的子類去實現,每一個子類有不同的表現

  多態屬於繼承

class Futher { public age: number; constructor(age: number) { this.age = age } counts(): void { console.log(this.age) } } class children1 extends Futher { constructor(age: number) { super(age) } counts(): void {    /* 多態,重寫方法不執行父類方法 */ console.log(this.age - 1) } } class children2 extends Futher { constructor(age: number) { super(age) } counts(): void { console.log(this.age + 1) } }

 

六、抽象類(abstract)

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

  1、抽象方法必須在抽象類中

  2、抽象類和抽象方法是一個標准,定義標准后,子類中必須包含抽象定義的方法

abstract class Futher { /* 定義一個抽象方法 */ public age: number; constructor(age: number) { this.age = age } abstract counts(): any; /* 抽象方法必須在抽象類中 */ } class children extends Futher { constructor(age: number) { super(age) } counts(): void {    /* 子類中必須有抽象類中的抽象方法 */ console.log(this.age - 1) } }

 


免責聲明!

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



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