1. 访问修饰符作用简述
- public(公共的):类的成员(属性和方法)被
public
修饰时,在类的内部、子类以及类的实例外部都可以访问。这是TypeScript中默认的访问修饰符,如果不写任何修饰符,就默认是 public
。
- private(私有的):被
private
修饰的成员,只能在类的内部访问,子类和类的实例外部都无法访问。这有助于隐藏类的内部实现细节,提高封装性。
- protected(受保护的):被
protected
修饰的成员,能在类的内部以及子类中访问,但不能在类的实例外部访问。它提供了一种介于 public
和 private
之间的访问级别,适合用于一些希望在子类中复用,但又不想暴露给外部的成员。
2. 类定义和继承中的使用示例
// 定义一个基类
class Animal {
// public属性,可在类内外访问
public name: string;
// private属性,只能在类内部访问
private age: number;
// protected属性,可在类及子类内部访问
protected species: string;
constructor(name: string, age: number, species: string) {
this.name = name;
this.age = age;
this.species = species;
}
// public方法,可在类内外调用
public introduce() {
return `I'm ${this.name}, a ${this.species}`;
}
// private方法,只能在类内部调用
private showAge() {
return `I'm ${this.age} years old`;
}
// protected方法,可在类及子类内部调用
protected getSpecies() {
return this.species;
}
}
// 定义一个子类继承自Animal
class Dog extends Animal {
constructor(name: string, age: number) {
super(name, age, 'dog');
}
// 子类中可以访问protected属性和方法
public bark() {
return `Woof! I'm ${this.name}, a ${this.getSpecies()}`;
}
}
// 创建Animal实例
const animal = new Animal('Tom', 3, 'cat');
console.log(animal.name); // 可以访问public属性
// console.log(animal.age); // 报错,不能访问private属性
// console.log(animal.species); // 报错,不能访问protected属性
console.log(animal.introduce()); // 可以调用public方法
// console.log(animal.showAge()); // 报错,不能调用private方法
// 创建Dog实例
const dog = new Dog('Buddy', 2);
console.log(dog.name); // 可以访问public属性
console.log(dog.bark()); // 可以调用子类的public方法,其中访问了protected方法
// console.log(dog.species); // 报错,不能访问protected属性
// console.log(dog.getSpecies()); // 报错,不能在子类实例外部访问protected方法