C# 中什么是重写(子类改写父类方法)

这篇具有很好参考价值的文章主要介绍了C# 中什么是重写(子类改写父类方法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法重写是指在继承关系中,子类重新实现父类或基类的某个方法。这种方法允许子类根据需要修改或扩展父类或基类的方法功能。在面向对象编程中,方法重写是一种多态的表现形式,它使得子类可以根据不同的需求和场景提供不同的方法实现。

方法重写的基本规则如下:

  1. 方法重写要求子类中的方法与父类或基类中的方法具有相同的方法名、返回类型和参数列表。
  2. 方法重写中的方法可以有不同的实现逻辑,但方法名、返回类型和参数列表必须与父类或基类中的方法保持一致。
  3. 方法重写只能在子类中进行,不能在父类或基类中进行。

在C#中,override 是一个关键字,用于在子类中重写(覆盖)父类中已有的虚拟方法、属性或索引器。

当一个方法、属性或索引器被声明为 virtual 时,它允许子类通过 override 关键字来提供自己的实现版本。通过重写父类的成员,子类可以修改或扩展继承的行为,以满足自身的需求。

下面是使用 override 的一个简单示例:

public class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("我是动物。");
    }
}

public class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine("我是一只猫咪,喵喵喵~");
    }
}

在这个示例中,Animal 类中的 Speak() 方法被声明为 virtual,表示它可以被子类重写。Cat 类继承了 Animal 类,并使用 override 关键字重写了父类的 Speak() 方法。

通过使用 overrideCat 类提供了自己的 Speak() 方法实现。当我们实例化 Cat 对象并调用 Speak() 方法时,会执行子类重写后的方法,输出 "我是一只猫咪,喵喵喵~"。

总结起来,override 关键字用于在子类中重写(覆盖)父类中已有的虚拟方法、属性或索引器。它允许子类根据自身需要修改或扩展继承的成员的行为。通过使用 virtualoverride,可以实现多态性,在运行时根据对象的实际类型调用相应的重写版本。

其他案例

class Animal {  
   void makeSound() {  
       System.out.println("The animal makes a sound");  
   }  
}
 
class Dog extends Animal {  
   @Override  
   void makeSound() {  
       System.out.println("The dog barks");  
   }  
}
 
public class Main {  
   public static void main(String[] args) {  
       Dog dog = new Dog();  
       dog.makeSound(); // 输出:The dog barks  
   }  
}

在这个示例中,Dog 类继承了 Animal 类,并重写了 makeSound() 方法。当创建一个 Dog 对象并调用 makeSound() 方法时,将执行 Dog 类中的方法实现,输出 "The dog barks"。

2.子类重写了父类的方法,子类的实例化对象在调用该方法输出子类方法结果

当子类重写了父类的方法后,子类的实例化对象在调用该方法名字时,将输出子类重写的新方法的结果。这是因为在 C# 中,方法重写遵循一种称为“动态绑定”的规则。

动态绑定是指在运行时,根据实际的对象类型来调用相应的方法。当子类实例化对象调用重写的方法时,实际上是在调用子类中的新方法。因此,输出的结果是子类重写的新方法的结果。

以下是一个简单的示例:

public class Animal {  
   public void MakeSound() {  
       Console.WriteLine("The animal makes a sound");  
   }  
}
 
public class Dog : Animal {  
   public override void MakeSound() {  
       Console.WriteLine("The dog barks");  
   }  
}
 
public class Main {  
   public static void Main() {  
       Dog dog = new Dog();  
       dog.MakeSound(); // 输出:The dog barks  
   }  
}

这个示例中,子类 Dog 重写了父类 AnimalMakeSound 方法。在 Main 类中,我们创建了一个 Dog 对象,并调用了其 MakeSound 方法。由于动态绑定的规则,调用的是子类中的新方法,因此输出的结果是 "The dog barks"。

C# 中什么是重写(子类改写父类方法),Unity与c#,c#,开发语言C# 中什么是重写(子类改写父类方法),Unity与c#,c#,开发语言文章来源地址https://www.toymoban.com/news/detail-698949.html

到了这里,关于C# 中什么是重写(子类改写父类方法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java子类继承父类方法、或者接口中方法的javadoc注释

    详情可以阅读: https://docs.oracle.com/en/java/javase/19/docs/specs/javadoc/doc-comment-spec.html#method-comment-inheritance 子类继承父类、或者子类实现接口,在子类中为了避免重复写注释,可以在子类方法注释的主要描述部分、或者@return、@param、@throws标记后面的文本参数部分插入{@inheritDoc}标记

    2024年02月11日
    浏览(41)
  • 父类对象的属性直接赋值给子类对象(使用copyProperties中的方法copyProperties)

    BeanUtils.copyProperties() 是 Apache Commons BeanUtils 包中提供的一个方法,用于将一个 JavaBean 对象的属性值赋值到另一个 JavaBean 对象中。该方法可以简化 JavaBean 之间的属性复制过程,避免手动编写大量的赋值代码。 以下是 BeanUtils.copyProperties() 方法的基本用法: 在上面的例子中,首

    2024年02月15日
    浏览(40)
  • C# 子类强制转换为父类异常,引出的C#Dll加载机制,以及同类名同命名空间同dll程序集在C#中是否为同一个类的研究。

    已知,子类B继承自父类A,但是在代码运行时,B类强制转换为A类,却报代码转换异常。 很奇怪的问题吧,不过这个也是难得机会,去研究C#运行的底层原理。 下面是报错的代码片段。 下面是报错结果(其中的敏感字符串被替换成了xxx): 通过上面的代码可以看出,从子类中

    2024年02月13日
    浏览(40)
  • Java 强制类型转换原理(父类转子类、子类转父类)

    在Java中,对象的强制转换(也称为类型转换)是将一个对象的引用转换为另一个类的引用,前提是这两个类之间存在继承或实现关系。强制转换可能会导致运行时异常,因为在转换的过程中,如果对象的实际类型与转换的目标类型不兼容,就会抛出ClassCastException异常。 分析

    2024年02月07日
    浏览(35)
  • 链式-父类中返回子类对象

    一晃五年没写博客了,依旧再C#上耕耘,依旧没有啥建树,现在也不知道.net上还有多少人再使用,在这里分享一些自己觉得写的还算优雅的代码。 对于自己写着完的代码,我特别喜欢链式(来源于jQuery的影响吧),大部分时候链式就是将返回值为void类型的对象,返回this指针

    2024年02月05日
    浏览(34)
  • C++ | 继承(基类,父类,超类),(派生类,子类)

    文章参考:https://blog.csdn.net/war1111886/article/details/8609957 一 .继承中的访问权限关系 1.基类,父类,超类是指被继承的类,派生类,子类是指继承于基类的类.  2.在C++中使用: 冒号表示继承,如class A : public B;表示派生类A从基类B继承而来 3.派生类包含基类的所有

    2024年02月15日
    浏览(38)
  • 【C/C++】父类指针指向子类对象 | 隐藏

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c++系列专栏:C/C++零基础到精通 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ c语言内容💖:

    2024年02月11日
    浏览(41)
  • Java feign接口调用后返回子类,序列化子类反序列化只得到父类

    需要修改序列化方法 我存的时候放的子类,接收到却是只有父类的数据 feign默认使用jackson进行序列化,需要在父类上加上注解 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 在父类头上增加注解: https://blog.csdn.net/qq_39493105/article/details/126061848

    2024年02月14日
    浏览(43)
  • Java父类强制转换为子类的三种情况(推荐)

    Father f = new Father(); Son s = (Son)f;//出错 ClassCastException Father f = new Son(); Son s = (Son)f;//可以 f只能用父类的方法 s可以用子类的所有方法 Son s = new Son(); Father f = (Father)s;//可以 f只能用父类的方法

    2024年02月08日
    浏览(39)
  • 我在VScode学Java继承(Java继承的特点、super关键字、super和this对比、方法重写、子类构造器)贰

    类的成员包括:成员变量;成员方法;构造方法 构造方法:不管什么修饰符都不可继承 成员变量:都可以继承,但注意一点(继承!=调用,私有的就不可调用) 成员方法:非私有可以。私有不可。 我的个人博客主页:如果’\\\'真能转义1️⃣说1️⃣的博客主页 关于Java基本语

    2024年02月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包