当在 TypeScript 中定义类的属性和方法时,可以使用访问修饰符来控制它们的可访问性。这些访问修饰符包括 public
、private
和 protected
。在本文中,我们将详细介绍这些访问修饰符的概念和用法。
1. public 访问修饰符
public
是默认的访问修饰符,如果没有显式指定访问修饰符,默认为 public
。使用 public
访问修饰符标记的属性和方法可以在类的内部和外部被访问。
class Example {
public name: string;
public age: number;
public greet() {
console.log('Hello!');
}
}
const obj = new Example();
obj.name = 'John';
obj.age = 25;
console.log(obj.name); // 输出: John
console.log(obj.age); // 输出: 25
obj.greet(); // 输出: Hello!
2. private 访问修饰符
private
访问修饰符将属性或方法标记为私有,表示它们只能在类的内部被访问,外部无法直接访问。私有成员通常用于封装一些内部实现细节,不希望外部直接访问。
class Example {
private secret: string;
private revealSecret() {
console.log(this.secret);
}
public accessSecret() {
this.secret = 'This is a secret.';
this.revealSecret();
}
}
const obj = new Example();
obj.accessSecret(); // 输出: This is a secret.
console.log(obj.secret); // 错误: 属性“secret”为私有属性,无法在类“Example”外部访问
obj.revealSecret(); // 错误: 方法“revealSecret”为私有方法,无法在类“Example”外部访问
通过使用 private
访问修饰符,可以控制类的成员的可访问性,提供了封装和信息隐藏的机制。
3. protected 访问修饰符
protected
访问修饰符将属性或方法标记为受保护的,表示它们在类的内部和子类中可以被访问,但在类的外部是不可访问的。
class Parent {
protected familyName: string;
}
class Child extends Parent {
public greet() {
this.familyName = 'Smith'; // 可以在子类访问被保护的成员
console.log(`Hello, ${this.familyName} family!`);
}
}
const child = new Child();
child.greet(); // 输出: Hello, Smith family!
使用 protected
访问修饰符可以使得父类的成员在子类中可见和可继承,但对于类的外部来说是不可访问的。
总结
public
访问修饰符允许在类的内部和外部访问属性和方法。private
访问修饰符将属性和方法限制为只能在类的内部访问。protected
访问修饰符允许在类的内部和子类中访问属性和方法,但对于类的外部来说是不可访问的。
使用这些访问修饰符可以有效地控制类成员的可访问性,提供了封装、信息隐藏和继承等面向对象编程的特性。