面向對象
面向對象是程式中一個重要的思想。所謂對象,就是計算機程式對現實世界的事物的抽象,即現實中的事物在程式中表現為對象。而程式中的對象都被分為資料和功能兩大部分,以人為例,人有姓名,年齡,性别等資料,在程式中稱為對象的屬性。同時,人有吃飯,走路,睡覺等功能,在程式中稱為對象的方法。而面向對象就是指程式的一切操作都是通過對象來完成的。
類
面向對象程式設計首先要建立對象。要建立對象就得先建立類。類可以了解為對象的模型,程式中根據類可以建立指定類型的對象。如通過Person類可以建立人的對象,通過Car類可以建立車對象。
- 定義類
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類分别表示中國人和美國人。
- 文法
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文法為核心,圍繞面向對象程式設計理論對TS的重要知識進行講述。主要簡述了如何通過TS文法進行類的建立,類的繼承,多态的實作,屬性的封裝。