【发布时间】:2017-08-22 09:47:51
【问题描述】:
我是 Typescript 的新手,我尝试在 playground 中使用 TypeScript。我注意到在 TypeScript 中,基类中的受保护成员可以被公共成员覆盖:
class Base {
protected name: string = '!'
}
class Derived extends Base{
public name: string = '?'
}
一方面,这对我来说是有意义的,因为 Liskov 替换原则仍然成立:基类比派生类有更严格的要求。但另一方面,我注意到 private 成员不能被 protected 或 public 覆盖,这对我来说似乎不一致:
class Base {
private name: string = '!'
}
class Derived extends Base{
public name: string = '?' // ERROR!
}
所以我想知道:
我的观察是预期行为还是 Typescript 中的错误?
如果是有意的,为什么会存在这种不一致?为什么 TypeScript 不要求所有覆盖成员与基类中的成员具有相同的可访问性?还是允许所有具有更高可访问性的派生成员覆盖基类中的成员?
【问题讨论】:
-
这里是给出明确解释的官方文档 - [Typescriptlang.org - Exposure of protected members] (typescriptlang.org/docs/handbook/2/…)
标签: javascript class oop inheritance typescript