ts語言特征:封裝,繼承,多態,抽象
1.class的定義
class Person {
name: string;
constructor(n: string) {
this.name = n;
}
getName():string {
return this.name;
}
setName(name:string):void {
this.name = name;
}
}
var p = new Person('張三');
console.log(p.getName()); //張三
console.log(p.setName('李四')); //李四
2.ts中實現繼承 extends super
class Person { name: string; constructor(name: string) { this.name = name; } run(name:string):void { this.name = name; } } class Web extends Person{ constructor(name: string) { super(name) //初始化父類的構造函數 } } var P = new Web('張三') //不報錯
注意:如果沒有 super(name) 會報錯
3.ts中實現繼承,子類添加方法;
class Person { name: string; constructor(name: string) { this.name = name; } run(name:string):void { this.name = name; } } class Web extends Person{ constructor(name: string) { super(name) //初始化父類的構造函數 } work():void{ console.log(this.name + '在工作') } } var P = new Web('張三') P.work(); //張三在工作
4.ts中實現繼承,父類方法和子類方法有一樣的方法;
class Person { name: string; constructor(name: string) { this.name = name; } run(name:string):void { this.name = name; } work():void{ console.log(this.name + '在跑步') } } class Web extends Person{ constructor(name: string) { super(name) //初始化父類的構造函數 } work():void{ console.log(this.name + '在工作') } } var P = new Web('張三') P.work(); //張三在工作
注意:先子類里面找方法,子類里面沒有在往父類里面找方法
5.ts類里面的修飾符,三種:
public:共有(默認);在類里面,子類,類外面都可以訪問
protected:保護類型;在類里面,子類可以訪問
private:私有;在類里面可以訪問
6.ts類的靜態屬性和靜態方法
class Person { name: string; static age: number = 20; constructor(name: string) { this.name = name; } run(name:string):void { this.name = name; } static work() { console.log('靜態方法') console.log(this.name) //報錯 靜態方法里面沒法調用this屬性 console.log(this.age) //不報錯 靜態方法里面可以調用靜態屬性 } } Person.age = 30; Person.work();
7.多態:父類定義一個方法不去實現,讓繼承它的子類去實現不同的表現,多態屬於繼承
class Animal { name: string; constructor(name: string) { this.name = name; } eat(){ //具體吃什么由它的子類去實現 console.log('吃什么') } } class Dog extends Animal { constructor(name: string) { super(name) } eat(){ console.log('小狗吃骨頭') } } class Cat extends Animal { constructor(name: string) { super(name) } eat(){ console.log('小貓是魚') } }
8.抽象方法:定義的一種標准
ts中的抽象類:它是提供其他的基礎,不能直接被實例化; abstract抽象方法只能放在抽象類里面,子類里面沒有
abstract class Animal { name: string; constructor(name: string) { this.name = name; } abstract eat():void; }
用abstract關鍵字定義抽象類和抽象方法,抽象類的抽象方法不包含具體的實現方法並且必須必須在子類去實現
class Dog extends Animal { constructor(name: string) { super(name) } eat(){ console.log('小狗吃骨頭') } } class Cat extends Animal { constructor(name: string) { super(name) } eat(){ console.log('小貓是魚') } }
可參考視頻:https://www.bilibili.com/video/BV1yt411e7xV?p=7
