MST

星途 面试题库

面试题:TypeScript类的数据隐藏与继承中的访问控制

在TypeScript中,定义一个基类`Animal`,它有一个私有属性`species`。然后定义一个子类`Dog`继承自`Animal`。要求在`Dog`类中添加一个公有方法`getSpeciesInfo`,这个方法能够在不直接暴露`species`属性的情况下,提供关于物种的一些信息。说明为什么这样做能实现数据隐藏,以及在继承体系中访问控制的规则是如何应用的。
12.6万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
class Animal {
    private species: string;
    constructor(species: string) {
        this.species = species;
    }
}

class Dog extends Animal {
    constructor(species: string) {
        super(species);
    }
    getSpeciesInfo(): string {
        return `This is a dog of species: ${this.species}`;
    }
}

这样做能实现数据隐藏是因为species属性被定义为private,这意味着它只能在Animal类内部被访问。即使Dog类继承自Animal类,也不能直接访问species属性。通过在Dog类中定义getSpeciesInfo方法,外部代码可以间接地获取关于species的信息,而不会直接暴露该属性。

在继承体系中访问控制规则的应用如下:

  • public:公有成员可以在类内部、子类以及类的实例外部访问。
  • private:私有成员只能在定义它们的类内部访问,子类无法直接访问。
  • protected:受保护成员可以在类内部以及子类中访问,但不能在类的实例外部访问。