跳至主要內容

修饰符

  • public: 公共的属性,在任意位置可以使用
  • private: 私有的属性, 只能在当前类中使用
  • protected: 受保护的属性,只能在当前类和其子类中使用
  • static: 属性、方法不需要创建类对象,可以直接调用
  • readonly:将属性设置为只读的,只读属性必须在声明时或构造函数里被初始化

继承

class Dog {
  age: number
}

class DogA extends Dog {
  name: string
}

const dogA = new DogA()
dogA.name = 'dogA'
dogA.age = 4

存取器

不需要单独提供get、set方法,采用getter、setter存取器来获取访问类的私有变量

class DogB extends Dog {
  private _gender: number

  // setter、getter存取器
  get gender(): number {
    return this._gender
  }

  set gender(gender: number): void {
    this._gender = gender
  }

  // 等价于
  public getGender(): number {
    return this._gender
  }

  public setGender(gender: number): void {
    this._gender = gender
  }
}

const dogB = new DogB()

// 通过gender方法来获取_gender私有属性值
dogB.gender = 18
console.log(dogB.gender)

静态属性

class TestStatic {
  // 静态属性
  public static age = 18

  // 静态方法
  public static async test() {
    return 'this is using static function'
  }
}

console.log(TestStatic.age)
console.log(TestStatic.test())

抽象类

抽象类做为其它派生类的基类使用。 一般不会直接被实例化。 不同于接口,抽象类可以包含成员的实现细节。 abstract关键字是用于定义抽象类和在抽象类内部定义抽象方法

abstract class Animal {
  // 抽象方法,需要继承后自己实现
  abstract makeSound(): void

  // 普通方法直接继承,然后重写
  move(): void {
    console.log('roaming the earch...')
  }
}

接口继承类

通过接口继承类,可以实现把类当做接口来使用

class PointXY {
  x: number
  y: number
}

interface PointXYZ extends PointXY {
  z: number
}