TypeScript 中類的用法
public private 和 protected
TypeScript 可以使用三種訪問修飾符(Access Modifiers),分別是 public
挠将、private
和 protected
卡儒。
-
public
修飾的屬性或方法是公有的羽资,可以在任何地方被訪問到角撞,默認(rèn)所有的屬性和方法都是public
的 -
private
修飾的屬性或方法是私有的哲鸳,不能在聲明它的類的外部訪問 -
protected
修飾的屬性或方法是受保護的摹量,它和private
類似涤伐,區(qū)別是它在子類中也是允許被訪問的
class Animal {
public name;
public constructor(name) {
this.name = name;
}
}
let a = new Animal('Jack');
console.log(a.name); // Jack
a.name = 'Tom';
console.log(a.name); // Tom
構(gòu)造器用到參數(shù),需要先聲明缨称,否則編譯報錯凝果。
使用private
class Animal {
private name;
public constructor(name) {
this.name = name;
}
}
let a = new Animal('Jack');
console.log(a.name);
a.name = 'Tom';
// index.ts(9,13): error TS2341: Property 'name' is private and only accessible within class 'Animal'.
// index.ts(10,1): error TS2341: Property 'name' is private and only accessible within class 'Animal'.
當(dāng)構(gòu)造函數(shù)修飾為 private 時,該類不允許被繼承或者實例化睦尽。
當(dāng)構(gòu)造函數(shù)修飾為 protected 時器净,該類只允許被繼承。
抽象類
抽象類是不允許被實例化
其次当凡,抽象類中的抽象方法必須被子類實現(xiàn)
類實現(xiàn)接口
實現(xiàn)(implements)是面向?qū)ο笾械囊粋€重要概念山害。一般來講,一個類只能繼承自另一個類宁玫,有時候不同類之間可以有一些共有的特性粗恢,這時候就可以把特性提取成接口(interfaces),用implements
關(guān)鍵字來實現(xiàn)欧瘪。這個特性大大提高了面向?qū)ο蟮撵`活性眷射。
一個類可以實現(xiàn)多個接口,用,號分開:
interface Alarm {
alert(): void;
}
interface Light {
lightOn(): void;
lightOff(): void;
}
class Car implements Alarm, Light {
alert() {
console.log('Car alert');
}
lightOn() {
console.log('Car light on');
}
lightOff() {
console.log('Car light off');
}
}
接口繼承接口
用 extends
實現(xiàn)繼承
接口繼承類
可以理解為接口繼承了類的一個實例對象佛掖,不包含類的構(gòu)造函數(shù)妖碉,靜態(tài)屬性或靜態(tài)方法,只繼承其中的實例屬性和實例方法芥被。