MST

星途 面试题库

面试题:TypeScript中类的访问修饰符及应用

请简述TypeScript中public、private和protected三种访问修饰符的作用,并举例说明在类的定义和继承中如何使用它们。
31.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

1. 访问修饰符作用简述

  • public(公共的):类的成员(属性和方法)被 public 修饰时,在类的内部、子类以及类的实例外部都可以访问。这是TypeScript中默认的访问修饰符,如果不写任何修饰符,就默认是 public
  • private(私有的):被 private 修饰的成员,只能在类的内部访问,子类和类的实例外部都无法访问。这有助于隐藏类的内部实现细节,提高封装性。
  • protected(受保护的):被 protected 修饰的成员,能在类的内部以及子类中访问,但不能在类的实例外部访问。它提供了一种介于 publicprivate 之间的访问级别,适合用于一些希望在子类中复用,但又不想暴露给外部的成员。

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方法