天天看點

TypeScript之面向對象

面向對象

面向對象是程式中一個重要的思想。所謂對象,就是計算機程式對現實世界的事物的抽象,即現實中的事物在程式中表現為對象。而程式中的對象都被分為資料和功能兩大部分,以人為例,人有姓名,年齡,性别等資料,在程式中稱為對象的屬性。同時,人有吃飯,走路,睡覺等功能,在程式中稱為對象的方法。而面向對象就是指程式的一切操作都是通過對象來完成的。

TypeScript之面向對象

面向對象程式設計首先要建立對象。要建立對象就得先建立類。類可以了解為對象的模型,程式中根據類可以建立指定類型的對象。如通過Person類可以建立人的對象,通過Car類可以建立車對象。

TypeScript之面向對象
  • 定義類
class 類名 {
  
  屬性名:類型;
  
  constructor(參數:類型) {
    this.屬性名 = 參數
  }
  
  方法名(){
    ……
  }
}           
  • 執行個體展示
//定義一個人的類
class Person {
  
  name:string;
  age:number;
  
  //靜态屬性(類屬性),通過類名調用
  static sex = "男"
  constructor(name:string,age:number) {
    this.name = name
    this.age = age
  }
  
  sayHi(){
    console.log(this.name+"跟你打了聲招呼!!")
  }
}           
  • 繼承

類的繼承是指在現有類的基礎上去建構一個新的類,新的類配稱為子類,現有類稱為子類的父類或基類。子類可以繼承父類的屬性和方法。以上面Person類為例,我們可以在他的基礎上建立Chinese類和American類分别表示中國人和美國人。

TypeScript之面向對象
  • 文法
class 子類 extends 父類{
  
  子類特有屬性:類型;
  
  //子類構造函數
  constructor(參數1:類型,參數2:類型,參數3:類型){
    //super可以用來調用父類的屬性,方法和構造函數
    super(參數1,參數2); //調用父類構造函數
    this.屬性名 = 參數3
  }
  
  方法名(){
     ……
  }
  
  父類方法名(){
    ……
    }
}           
  • 執行個體展示
class Chinese extends Person{
  
  country:string;
  
  constructor(name:string,age:number,country:string){
    super(name,age);
    this.country = country
  }
  
  //重寫Person類sayHi()方法
  sayHi(){
    console.log(`${this.name}說了聲你好`)
  }
  
   //新增speakChinese()方法
  speakChinese(){
    console.log(`${this.name}會說中文`)
  }
}           

多态

在上面的執行個體中,我們看到了子類對父類的sayHi()方法的實作過程進行了重新編寫,這種情況被我們稱為重寫。

  • 重寫

重寫也叫覆寫。指子類對父類已有的非靜态,非private,非final方法的實作過程進行重新編寫。傳回值和形參不能改變,與父類保持一緻。即外殼不變,核心重寫。同時,重寫是實作多态的先決條件,沒有重寫就沒有多态。

  • 多态

多态主要是指子類對同一方法産生不同的行為。是以,多态是建立在繼承的基礎上産生的,先有繼承才有多态。同時,我通過在父類建立方法,然後在不同子類中進行各自的重寫,以此來達到多态。

屬性的封裝

  • 修飾符

TS可以在屬性之前添加屬性修飾符,具體的屬性修飾符有如下幾種:

public:公共屬性。被public修飾的屬性可以在任意位置通路或修改預設值;

protected:受保護屬性。被protected修飾的屬性隻能在目前類和目前類的子類中通路;

private:私有屬性。被private修飾的屬性隻能在目前類通路,其他位置都無法通路;           
  • 文法

在TS中我們通過private對屬性進行封裝,通過設定get()和set()方法通路和修改屬性。具體文法如下:

class 類名 {
  
  private _屬性名:類型;
  
  constructor(參數:類型) {
    this._屬性名 = 參數
  }

  get 屬性名(){
    return this._屬性名
  }

  set 屬性名(參數:類型){
    this._屬性名 = 參數
  }

}

let 執行個體 = new 類名(實參);

// 外部環境擷取屬性
console.log(執行個體.屬性名);

// 外部環境修改屬性
執行個體.屬性名 = 值;           
  • 執行個體展示
class Person {
  private _name:string;
  private _age:number;

  constructor(name:string,age:number) {
    this._name = name
    this._age = age
  }
	
  get name(){
    return this._name
  }

  set name(value:string){
    this._name = value
  }

  get age(){
    return this._age;
  }

  set age(value:number){
    this._age = value
  }
}

let p = new Person("吳名小卒",18);

console.log(p.name,p.age)

p.age = 20

console.log(p.age)           
  • 輸出結果
TypeScript之面向對象

總結

本篇文章主要以Typescript文法為核心,圍繞面向對象程式設計理論對TS的重要知識進行講述。主要簡述了如何通過TS文法進行類的建立,類的繼承,多态的實作,屬性的封裝。

繼續閱讀