继承的访问级别

最近遇到一个问题,X++继承的时候子类是否可以改变父类方法的访问级别?
记得C++子类可以降低其父类方法的访问级别,比如父类方法的访问级别是public,子类方法覆盖后可改为protected或者private,C#是不允许更改其父类方法的访问级别的,子类和父类的访问级别必须一样。另外C#不能覆盖private的方法,Java在编译期倒是不会阻止覆盖private方法,只是在运行期不会调用。
X++也不能覆盖private的方法,如果试图覆盖父类的private方法,会报如下错误
方法 ParentMethod 已声明为专用方法,不能重载。
不过对于访问级别的问题,X++的处理比较让人费解,跟C++和C#都不一样,它只允许子类提升父类方法的访问级别,比如protected的方法,子类覆盖的时候可以更改成public,但不允许降低其访问级别,比如把protected的方法改为private。
父类方法:

protected void ParentMethod()
{
    ;
    info(
"I'm from Parent");
}

子类方法:

public void ParentMethod()
{
    super();
    info(
"I'm from Child");
}

上面的方法是可以编译通过的。
调用:

    Child child = new Child();
    ;
    child.ParentMethod();

这样子类就暴露了父类的protected方法ParentMethod,不太清楚X++为什么要这样设计。

原文地址:https://www.cnblogs.com/Farseer1215/p/700261.html