“
TypeScript是一種編程語(yǔ)言,它是JavaScript的超集。它通過(guò)添加靜態(tài)類(lèi)型、類(lèi)、接口和模塊等功能來(lái)擴(kuò)展JavaScript
”
class Hero { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } say(): void { console.log(`my name is ${this.name}`); }}
在上面的代碼中,我們定義了一個(gè)名為Hero的類(lèi),它具有name和age屬性,以及一個(gè)say方法。構(gòu)造函數(shù)用于初始化對(duì)象的屬性。
通過(guò)類(lèi)的定義,我們可以創(chuàng)建多個(gè)具有相同屬性和行為的對(duì)象,實(shí)現(xiàn)代碼的復(fù)用和封裝。
const Jieke = new Hero('jieke', 28)Jieke.say(); // 輸出:my name is jieke
在面向?qū)ο缶幊讨校^承是一種重要的概念。通過(guò)繼承,我們可以創(chuàng)建一個(gè)類(lèi)的子類(lèi)(也稱(chēng)為派生類(lèi)),并繼承其屬性和方法。子類(lèi)可以擴(kuò)展或修改父類(lèi)的功能,從而實(shí)現(xiàn)代碼的重用和擴(kuò)展
在TypeScript中,我們使用extends關(guān)鍵字來(lái)指定一個(gè)類(lèi)繼承自另一個(gè)類(lèi)
class Superman extends Hero { heroId: string; constructor(name: string, age: number, heroId: string) { super(name, age); this.heroId = heroId; } skill(): void { console.log(`${this.name}_${this.heroId}.`); }}
我們定義了一個(gè)名為Superman的子類(lèi),它繼承自Hero父類(lèi)。子類(lèi)具有自己的屬性heroId,并通過(guò)調(diào)用super關(guān)鍵字來(lái)調(diào)用父類(lèi)的構(gòu)造函數(shù)。
創(chuàng)建子類(lèi)的實(shí)例與創(chuàng)建父類(lèi)的實(shí)例類(lèi)似:
const s1 = new Superman("Batman", 20, "12345");s1.say(); // 輸出:my name is Batmans1.skill(); // 輸出:Batman_12345
在TypeScript中,我們可以使用訪問(wèn)修飾符來(lái)限制類(lèi)的屬性和方法的訪問(wèn)。以下是幾個(gè)常用的訪問(wèn)修飾符:
通過(guò)使用訪問(wèn)修飾符,我們可以控制類(lèi)的成員的可見(jiàn)性,增強(qiáng)了封裝性和安全性
class Person { public name: string; private age: number; protected gender: string; constructor(name: string, age: number, gender: string) { this.name = name; this.age = age; this.gender = gender; } say() { console.log(`Hi, my name is ${this.name}.`); } private sayAge() { console.log(`I am ${this.age} years old.`); }}class Student extends Person { constructor(name: string, age: number, gender: string) { super(name, age, gender); } sayGender() { console.log(`My gender is ${this.gender}.`); }}const person = new Person("Tom", 18, "male");console.log(person.name); // "Tom"console.log(person.age); // Error: Property 'age' is private and only accessible within class 'Person'.console.log(person.gender); // Error: Property 'gender' is protected and only accessible within class 'Person' and its subclasses.const student = new Student("Jane", 20, "female");console.log(student.gender); // "female"
在TypeScript中,我們還可以使用抽象類(lèi)(abstract class)來(lái)定義一個(gè)不可實(shí)例化的基類(lèi)。抽象類(lèi)提供了一種模板,用于派生其他類(lèi),并定義了一些必須由子類(lèi)實(shí)現(xiàn)的抽象方法。抽象類(lèi)不能被直接實(shí)例化,只能被繼承
以下是一個(gè)抽象類(lèi)的示例:
abstract class Role { // 定義抽象屬性 abstract name:string; abstract age:number; // 定義保護(hù)屬性,每個(gè)繼承子類(lèi)都能繼承并調(diào)用的屬性 protected lastPoint!: {x:number,y:number}; protected status!: "run" | "risk" | "die"; // 定義保護(hù)方法,每個(gè)繼承子類(lèi)都能繼承并調(diào)用的方法 protected getLastPoint (lastPoint:{x:number,y:number}) { this.lastPoint = lastPoint; } // 定義抽象方法,在子類(lèi)中重寫(xiě)來(lái)執(zhí)行不同的任務(wù) abstract attack():void;}
繼承抽象類(lèi)的子類(lèi)實(shí)例化對(duì)象通過(guò)調(diào)用同一抽象類(lèi)規(guī)定的抽象方法,來(lái)實(shí)現(xiàn)了不同的操作,體現(xiàn)了類(lèi)的多態(tài)
class antor extends Role { // 重寫(xiě)抽象屬性 name: string = "han"; age: string = 20; // 重寫(xiě)抽象方法 attack(): void { console.log("正在被攻擊"); } constructor () { super(); }}
本文鏈接:http://www.www897cc.com/showinfo-26-14000-0.html如何在 TypeScript 中使用類(lèi)和繼承
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com