Intellisense没有抱怨子类中未正确实现(访问修饰符)抽象方法



我有一个例子,我有一个子类和一个抽象类,它实现了其中的一些方法,我的问题是我的智能感知(VSCode(,抽象方法被定义为受保护的,但如果方法被实现为受保护,它不会抱怨(但如果我将其定义为私有,它会抱怨(

abstract class TestParent {
protected abstract SomeFunction();
}
class ChildClass extends TestParent {
public SomeFunction() {
console.log("hello");
}
}

^无错误

我预计会收到一个错误,说ChildClass错误地扩展了TestParent,SomeFunction应该受到保护。

class ChildClass extends TestParent {
SomeFunction() {
console.log("hello");
}
}

^无错误

class ChildClass extends TestParent {
private SomeFunction() {
console.log("hello");
}
}

^这是唯一一个给我错误扩展错误的情况。

我偶然发现了这一点,我所期望的是,当我试图实现该方法时,会收到一个歪歪扭扭的消息,告诉我应该将其标记为受保护,因为任何其他情况都是不正确的实现(访问修饰符(非受保护(或无访问修饰符(

这似乎是有意为之。在派生类中,不能给出比父类更严格的访问修饰符;如果我理解正确的话,利斯科夫替代原理在这里适用。仅供参考:TS操场也是如此。

最新更新