首页 > 后端开发 > C++ > 方法继承中的'新”和'覆盖”关键字有什么区别?

方法继承中的'新”和'覆盖”关键字有什么区别?

DDD
发布: 2025-01-28 11:56:09
原创
259 人浏览过

What's the Difference Between `new` and `override` Keywords in Method Inheritance?

深入理解“new”和“override”关键字

面向对象编程中,继承是核心概念,允许派生类扩展和修改基类的行为。在定义这些类的方法时,开发者可能需要重写或创建新的实现。为了阐明这种区别,让我们考察以下场景:

场景一:基类

public virtual void DoIt();
登录后复制

此语法在基类中声明了一个虚方法。虚方法可以在派生类中被重写以提供具体的实现。

场景一:派生类

public new void DoIt();
登录后复制

在派生类方法中使用“new”会创建一个新的、独立的方法,其名称与基类中的方法相同。但是,这不被认为是重写,并且当从基类引用调用时,不会影响基类方法的行为。

场景二:基类

public void DoIt();
登录后复制

这是一个非虚方法,不能在派生类中被重写。派生类必须使用“new”修饰符实现一个具有相同名称的新方法。

场景二:派生类

public override void DoIt();
登录后复制

“override”修饰符表示派生类中的方法正在重写基类中具有相同签名的另一个方法。当通过基类引用调用时,将执行重写的方法。

实际区别

  • Override: 无论引用类型如何,只要调用该方法,派生类中的重写方法就会被调用。
  • New: 只有当引用派生类对象时,派生类中新创建的方法才会被调用。

推荐用法

通常,当扩展继承方法的行为时,建议使用“override”。如果要在派生类中创建具有相同名称的新方法,请使用“new”。

示例

考虑以下代码:

public class Base
{
    public virtual void DoIt()
    {
        Console.WriteLine("Base.DoIt");
    }
}

public class Derived : Base
{
    public override void DoIt()
    {
        Console.WriteLine("Derived.DoIt");
    }
}

Base b = new Derived();
b.DoIt();                      // 调用 Derived.DoIt
登录后复制

在此示例中,“Derived.DoIt()”重写了“Base.DoIt()”,并且当从引用“Derived”对象的“b”变量调用“DoIt()”方法时,会调用它。

以上是方法继承中的'新”和'覆盖”关键字有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板