似乎可以将子类中的属性可见性从protected
更改为public
:
class BaseFoo {
protected foo;
}
class Foo extends BaseFoo {
foo = 1;
}
new Foo().foo;
但不是任何其他可能的组合。我认为通过省略可见性修饰符意外更改为public
比从protected
更改为private
(这是不允许的)更有害。
对此有何解释?这是一个众所周知的问题吗?
答案 0 :(得分:1)
在回购here中,似乎已经讨论了问题,然后关闭为“按预期工作”。 OOP理论有点超出了我的专业知识,但我对维护者逻辑的理解是,protected是基类上应该是私有的方法类别,但是允许在子级上公开。然后
class Foo extends BaseFoo {
protected foo = 1;
}
是foo
上保持Foo
“私密”的方法。至于隐式属性类型的问题(foo = 1
默认为public
?),这似乎与预期的行为有关。默认为公共是整个TS的标准,如果你想让那不可能,你可以使用:
class BaseFoo {
private foo;
}
class Foo extends BaseFoo {
foo = 1; // compiler error
}