类的定义中可以包含静态成员。类的静态成员不属于类的某个实例,而是属于类本身。类的静态成员使用static
关键字定义,并且只允许通过类名来访问。
例如,下例中Circle类定义了静态成员变量version
,它只允许通过类名Circle进行访问:
class Circle {
static version: string = 'coolcou.com';
}
// 正确,结果为 'coolcou.com'
const version = Circle.version;
const circle = new Circle();
circle.version;
// ~~~~~~~
// 编译错误!'version' 属性是 'Circle' 类的静态属性
静态成员可访问性
类的静态成员也可以定义不同的可访问性,如public、private和protected。
类的public静态成员对访问没有限制,可以在当前类的内部、外部以及派生类的内部访问。示例如下:
class Base {
public static x: string = 'coolcou.com';
a() {
// 正确,允许在类内部访问公有静态成员 x
Base.x;
}
}
class Derived extends Base {
b() {
// 正确,允许在派生类内部访问公有静态成员 x
Base.x;
}
}
// 正确,允许在类外部访问公有静态成员 x
console.log(Base.x)
输出结果:
类的protected静态成员允许在当前类的内部和派生类的内部访问,但是不允许在当前类的外部访问。示例如下:
class Base {
protected static x: string = 'coolcou.com';
a() {
// 正确,允许在类内部访问受保护的静态成员 x
Base.x;
}
}
class Derived extends Base {
b() {
// 正确,允许在派生类内部访问受保护的静态成员 x
Base.x;
}
}
// 错误!不允许在类外部访问受保护的静态成员 x
Base.x;
类的private静态成员只允许在当前类的内部访问。示例如下:
class Base {
private static x: string = 'coolcou.com';
a() {
// 正确,允许在类内部访问受保护的静态成员 x
Base.x;
}
}
class Derived extends Base {
b() {
// 错误!不允许在派生类内部访问受保护的静态成员 x
Base.x;
}
}
// 错误!不允许在类外部访问受保护的静态成员 x
Base.x;
继承静态成员
类的public静态成员和protected静态成员也可以被继承。例如,下例中派生类Derived继承了基类Base的静态成员x
和y
:
class Base {
public static x: string = 'coolcou.com';
protected static y: string = '';
}
class Derived extends Base {
b() {
// 继承了基类的静态成员 x
Derived.x;
// 继承了基类的静态成员 y
Derived.y;
}
}
酷客网相关文章:
评论前必须登录!
注册