zoukankan      html  css  js  c++  java
  • 继承的访问级别

    最近遇到一个问题,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++为什么要这样设计。

  • 相关阅读:
    [bzoj3524]Couriers
    [bzoj2789]Letters
    [bzoj4318]OSU!
    [luogu4570]元素
    [hdu6600]Just Skip The Problem
    [bzoj5025]单调上升路径
    [bzoj4557]侦察守卫
    [hdu5379]Mahjong tree
    [bzoj2957]楼房重建
    [noi253]A
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/700261.html
Copyright © 2011-2022 走看看