在下面的场景中,我有一个抽象类,其中包含protected
访问修饰符的抽象方法(我当然要尊重它)。
问题是,实现抽象的类可以尊重这个访问修饰符。编译器似乎没有费心去执行它。完整示例如下:
abstract class AbstractClass {
protected abstract methodOne(): void;
protected abstract methodTwo(): void;
}
class ImplementationClass extends AbstractClass {
protected methodOne(): void {
// doing something.
}
public methodTwo(): void {
// doing something else.
}
}
class App {
instance: ImplementationClass;
constructor() {
this.instance = new ImplementationClass();
this.instance.methodOne();
this.instance.methodTwo();
}
}
从代码中可以看出,methodOne
实现尊重访问修饰符,但methodTwo
不是(public
)。因此,在我的App
类中,编译器正确地抱怨methodOne
受到保护并且只能在类ImplementationClass
中访问,而对于methodTwo
,invokation对于编译器来说是完全合法的。
我错过了一些非常基本的东西吗?难道这也不是错误吗?
答案 0 :(得分:0)
这是设计的,它适用于任何成员而不仅仅是抽象成员。如果基类种类public
,派生类可以指定protected
访问修饰符。无论access修饰符如何,都无法覆盖private
个成员。
您可以查看this GitHub问题了解详情