类
About 4 min
类
修饰符
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
}