類
1. 訪問修飾符
public:公共修飾符
注意:
表示屬性或方法都是公有的,在類的內部,子類的內部,類的實例都能被訪問,默認情況下,爲public
class People {
public name : string
constructor (name:string) { //構造函數必須寫
this.name = name
}
public say () :void {
console.log('你好')
}
}
private 私有修飾符
注意:
表示在當前類中可以訪問,子類,外部類不可以訪問
class People {
private name : string
constructor (name:string) { //構造函數必須寫
this.name = name
}
private say () :void {
console.log('你好')
}
}
protected 保護類型
注意:
表示在當前類中和子類中可以訪問,外部類不可以訪問
class People {
protected name : string
constructor (name:string) { //構造函數必須寫
this.name = name
}
protected say () :void {
console.log('你好')
}
}
注意:
TypeScript 只做編譯時檢查,當你試圖在類外部訪問被 private 或者 protected 修飾的屬性或方法時,TS 會報錯,但是它並不能阻止你訪問這些屬性或方法。
readonly 只讀修飾符
注意:
表示某個屬性是隻讀的,不能被修改
class People {
readonly name : string
constructor (name:string) { //構造函數必須寫
this.name = name
}
}
2. 聲明類
class People {
name : string //默認爲public
age : number
constructor (name:string, age:number) { //構造函數必須寫
this.name = name
this.age = age
}
say () :void {
console.log('你好')
}
}
const HH : People = new People('含含', 21)
console.log(HH.name)
console.log(HH.age)
HH.say()
3. 類的繼承
class Student extends People {
cm : number
constructor (name:string, age:number, cm:number) {
super(name, age) //super 繼承父類的構造函數,並向構造函數傳參,super必須寫在第一行
this.cm = cm
}
work () : void {
console.log('學習')
}
}
const stu1 : Student = new Student('liu', 22, 175)
console.log(stu1.name)
console.log(stu1.age)
console.log(stu1.cm)
stu1.say()
stu1.work()
4. 靜態屬性和靜態方法
注意:
靜態方法和靜態屬性必須使用類名調用
靜態屬性和靜態方法在實例化之前就已經存在
注意:靜態方法調用不了實例化方法和實例化屬性,因爲靜態域加載是在解析階段,而實例化是在初始化階段,(java原理),所以靜態方法裏面不能調用本類的方法和屬性,可以調用靜態屬性和靜態方法
class People {
static name1 : string = '靜態屬性';
static say () :void {
console.log('靜態方法')
}
}
console.log(People.name1)
People.say()
5. 多態
多態---->重寫方法
父類定義一個方法不去實現,讓繼承它的子類去實現,每個子類的該方法有不同的表現
class Animal {
name : string
constructor (name:string) {
this.name = name
}
eat () : void {
//讓它的子類去實現不同的eat方法
}
}
class Laohu extends Animal {
constructor (name:string) {
super(name)
}
eat () : void {
console.log(`${this.name}吃肉!`)
}
}
class Laoshu extends Animal {
constructor (name:string) {
super(name)
}
eat () : void {
console.log(`${this.name}吃糧食!`)
}
}
const laohu : Laohu = new Laohu('老虎')
laohu.eat()
const laoshu : Laoshu = new Laoshu('老鼠')
laoshu.eat()
6. 類和接口
注意:
類可以實現(implement)接口。通過接口,你可以強制地指明類遵守某個契約。你可以在接口中聲明一個方法,然後要求類去具體實現它。
接口不可以被實例化,實現接口必須重寫接口中的抽象方法
interface Play {
plays (difang:string) : void;
}
class Playy implements Play {
plays(difang: string): void {
console.log(`我們要去${difang}玩!!!`)
}
}
const pl : Playy = new Playy();
pl.plays('北京')
注意:類和接口的區別
類可以實現(implement)多個接口,但只能擴展(extends)自一個抽象類。
抽象類中可以包含具體實現,接口不能。
抽象類在運行時是可見的,可以通過 instanceof判斷。接口則只在編譯時起作用。
接口只能描述類的公共(public)部分,不會檢查私有成員,而抽象類沒有這樣的限制。
7. 抽象類和抽象方法
注意:
用abstract關鍵字定義抽象類和抽象方法,抽象類中的抽象方法不包含具體實現並且必須在派生類(抽象類的子類)中實現
抽象類:它是提供其他類繼承的基類,不能直接被實例化,子類繼承可以被實例化
abstract修飾的方法(抽象方法)只能放在抽象類裏面
抽象類和抽象方法用來定義標準(比如定義標準爲:抽象類Animal有抽象方法eat,要求它的子類必須包含eat方法)
abstract class People {
name : string
constructor (name:string) {
this.name = name
}
abstract eat (food:string) :void;//抽象方法不包括具體實現,並且必須再派生類中實現
}
class Stud1 extends People {
//抽象類的子類必須實現抽象類中的抽象方法
constructor (name:string) {
super(name)
}
eat(food: string): void {
console.log(`我愛吃${food}`)
}
}
const stu11 : Stud1 = new Stud1('liu')
stu11.eat('麪條')
總結
public、private、protected、Class、interface、abstract 、多態,不禁感嘆,前後端的差異真的越來越小了。
下一篇文章會出關於TypeScript的接口的知識點,敬請期待。
你點的每個贊,我都認真當成了喜歡