A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈君 于 2014-6-1 09:33 编辑

一个是用new来隐藏基类方法,一个是用override改写虚方法或抽象方法。怎么说呢。感觉除了他们的用法上有区别外,我感觉他们实际实现的功能是一样的(除了改写抽象方法)。给我的感觉就是改写和隐藏就是一样的,不知道为什么它们不都叫做改写呢?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

3 个回复

倒序浏览
隐藏基类方法 和重写基类方法 区别在于使用时,隐藏基类方法方法和声明相关。重写基类方法和实现相关。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
如果是隐藏基类的话后民的子类就不能够再进行重写了,而且还有一个问题就是,当使用对象基类部分的引用调用一个覆写方法的时候,方法的调用沿被派生层次向上回溯,一直到被标记为override的方法的最新派生版本位置。如果在更高的派生级别有该方法的其它声明,但是没有被标记为override,比如是用new关键字来修饰,那么他们不会被调用
        上面的举例:有三个类A/B/C,关系为C继承B,B继承A。A中有一个用virtual标记的虚方法M,在B中通过override来重写了这个M方法。C中分别使用用override来重写M方法以及用new关键字来隐藏该方法。最后声明一个C的实例成员c1,将其转换成A类型,即:A a = (A)c1;  通过实例对象a来调用M方法【a.M()】,结果为:C类中通过override重写M方法的时候,执行的是C类中重写的方法;而通过 new 关键字来隐藏M方法时,执行的确实B类中重写后的M方法。

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马