深入理解“new”和“override”关键字
面向对象编程中,继承是核心概念,允许派生类扩展和修改基类的行为。在定义这些类的方法时,开发者可能需要重写或创建新的实现。为了阐明这种区别,让我们考察以下场景:
场景一:基类
public virtual void DoIt();
此语法在基类中声明了一个虚方法。虚方法可以在派生类中被重写以提供具体的实现。
场景一:派生类
public new void DoIt();
在派生类方法中使用“new”会创建一个新的、独立的方法,其名称与基类中的方法相同。但是,这不被认为是重写,并且当从基类引用调用时,不会影响基类方法的行为。
场景二:基类
public void DoIt();
这是一个非虚方法,不能在派生类中被重写。派生类必须使用“new”修饰符实现一个具有相同名称的新方法。
场景二:派生类
public override void DoIt();
“override”修饰符表示派生类中的方法正在重写基类中具有相同签名的另一个方法。当通过基类引用调用时,将执行重写的方法。
实际区别
推荐用法
通常,当扩展继承方法的行为时,建议使用“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中文网其他相关文章!