为什么抽象方法访问修饰符不需要被实现者类尊重?

时间:2018-02-19 10:53:19

标签: typescript

在下面的场景中,我有一个抽象类,其中包含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对于编译器来说是完全合法的。

我错过了一些非常基本的东西吗?难道这也不是错误吗?

1 个答案:

答案 0 :(得分:0)

这是设计的,它适用于任何成员而不仅仅是抽象成员。如果基类种类public,派生类可以指定protected访问修饰符。无论access修饰符如何,都无法覆盖private个成员。

您可以查看this GitHub问题了解详情