TypeScript中的方法過載(38)

2021-10-01 21:30:39 字數 3789 閱讀 3905

1、public 開放的/公開的

當建立乙個類時,成員預設的修飾符為public

class person

public speak() :string

}let ps= new person("world");

ps.speak() // 通過例項化後的物件呼叫類裡的方法

2、private 私有的

只能在類的內部訪問 private修飾的成員,當前類的例項也不能訪問,且不能被繼承,繼承後的物件例項化後也不能訪問。constructor 也可以被 private訪問修飾符修飾。

class animal 

}new animal("cat").name; // 錯誤: 'name' 是私有的.

當被protected訪問修飾符修飾的成員,相當於給成員穿了一層防護。類的例項不能訪問,不能被繼承。

3、protected 受保護的

與private不同的是,父類constructor中如果有屬性,繼承後的constructor中就得有super(),protected成員在派生類中依然可以訪問(注:只能在子類 中 獲取父類的受保護的屬性方法)。被繼承後的例項也不能訪問

super():執行父類的建構函式。

class animal 

run(distance: number) moved $`)

console.log(this.name)

}}class dog extends animal

}let animals = new animal('xg')

let dog = new dog('***')

dog.name // 訪問不到

當屬性name被訪問修飾符protected修飾後,只能在類的內部訪問name屬性,可以被繼承,只能在派生類中能訪問,繼承後的例項也不能夠訪問。

4、readonly 唯讀的

不能被修改。可以被繼承 但是繼承後的例項還是不能修改唯讀成員。

class octopus 

}let dad = new octopus("man with the 8 strong legs");

dad.name = "man with the 3-piece suit"; // 錯誤! name 是唯讀的.

typescript支援通過get/set來擷取對 物件成員 的訪問。 它能幫助你有效的控制對物件成員的訪問。

let passcode = "secret passcode";

class employee

set fullname(newname: string)

else

}}let employee = new employee();

employee.fullname = "bob smith";

if (employee.fullname)

我們可以隨意的設定 fullname,這是非常方便的,但是這也可能會帶來麻煩。

我們可以修改一下密碼,來驗證一下訪問器是否是工作的。當密碼不對時,會提示我們沒有許可權去修改員工。

概念:不需要被例項化 訪問的成員 稱之為 靜態成員,即只能被當前類訪問的成員

和訪問修飾符成員相似,static修飾的成員屬性或是方法 ,只能通過類名. 成員名稱 訪問。不能夠通過 例項物件 訪問靜態成員 。

class grid ;

calculatedistancefromorigin(point: )

constructor (public scale: number)

}let grid1 = new grid(1.0); // 1x scale

let grid2 = new grid(5.0); // 5x scale

console.log(grid1.calculatedistancefromorigin());

console.log(grid2.calculatedistancefromorigin());

抽象類 使用abstract 修飾,抽象類可以有普通的方法,也可以有抽象的方法,但是抽象的方法不能被實現,只能在派生類中實現(普通類中不能有抽象的方法),抽象類不能夠被例項化。

不同於介面,抽象類可以包含成員的實現細節

abstract class animal 

}

介面與抽象類的區別

相同點:

1、都不能被例項化。

2、介面的實現類和抽象類的子類只有全部實現了介面或者抽象類中的方法後才可以被例項化。

不同點:

1、介面只能定義抽象方法不能實現方法,抽象類既可以定義抽象方法,也可以實現方法。

2、單繼承,多實現。介面可以實現多個,只能繼承乙個抽象類。

3、介面強調的是功能,抽象類強調的是所屬關係。

4、介面中的所有成員變數 為public static final, 靜態不可修改,當然必須初始化。介面中的所有方法都是public abstract 公開抽象的。而且不能有構造方法。抽象類就比較自由了,和普通的類差不多,可以有抽象方法也可以沒有,可以有正常的方法,也可以沒有。

抽象類強調的是從屬關係,介面強調的是功能。

方法名相同,引數型別或個數不同,返回型別可以相同也可以不同。

(可以根據所傳遞進來的不同引數,決定具體呼叫哪個函式。)

相同點:

1、都不能被例項化。

2、介面的實現類和抽象類的子類只有全部實現了介面或者抽象類中的方法後才可以被例項化。

不同點:

1、介面只能定義抽象方法不能實現方法,抽象類既可以定義抽象方法,也可以實現方法。

2、單繼承,多實現。介面可以實現多個,只能繼承乙個抽象類。

3、介面強調的是功能,抽象類強調的是所屬關係。

4、介面中的所有成員變數 為public static final, 靜態不可修改,當然必須初始化。介面中的所有方法都是public abstract 公開抽象的。而且不能有構造方法。抽象類就比較自由了,和普通的類差不多,可以有抽象方法也可以沒有,可以有正常的方法,也可以沒有。

抽象類強調的是從屬關係,介面強調的是功能。

方法過載與方法重寫的區別

方法的重寫(overrriding):當乙個類繼承另外乙個類的時候,那麼該類(子類/派生類)就擁有了其父類(基類)的成員方法和成員變數。在子類當中,可以建立屬於自己獨有的成員,如果建立了乙個與父類中名稱相同、引數列表相同的方法,只是方法體中的實現形式不相同,以實現與父類的功能不相同,這種方式就被稱為方法的重寫,也被稱為方法的覆蓋。

()方法的過載(overloading):方法的過載是指在乙個類當中,有多個方法,而且這些方法的名字是相同的,但是引數列表和返回值是不相同,當過載的時候,方法名的名稱是被共享的,但是引數型別和引數個數是不相同的,返回值型別可以相同也可以不相同。

typeScript中的繼承

ts中類的定義 class person run void let p new person 李哥 p.run 李哥 class person getname string setname name string void let p new person 李哥 alert p.getname 李哥...

TypeScript中的介面

介紹 typescript的核心原則之一是對值所具有的結構進行型別檢查。它有時被稱做 鴨式辨型法 或 結構性子型別化 在typescript裡,介面的作用就是為這些型別命名和為你的 或第三方 定義契約。通過關鍵字inte ce來定義介面 inte ce list inte ce result fun...

TypeScript中的函式

1.用function來定義函式 返回值的number可以省略,這是由於ts的型別推斷 function add1 x number,y number number 2.通過變數來定義函式型別 let add2 x number,y number number 3.通過型別別名來定義函式型別 typ...