C#中重载与重写区别分析
作者:lijiao 发布时间:2023-11-01 17:43:05
一、前言
接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢?因为面向对象具有可复用性、可维护性、可扩展性等优点。
本人之前一直接触的是VB语言,所以正式接触面向对象的编程语言还要从C#开始。前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。
二、定义
重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型不同。因此重载对返回值没有要求,可以相同,也可以不同。但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。
重写:继承时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同。例如父类方法声明为virtual(虚方法),子类中使用override申明此方法的重写。
三、示例
1、重载:
我们建立一个猫类,在这个类中构造两个方法。一个是带参数姓名的方法,另一个是不带参数姓名的方法。这样当我们初始化一个“猫”的对象时,就可以选择给对象起名或者不起名。从而达到扩展的目的。
2、 重写:
比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。
Class Animal
{
public virtual string Shout()//注意修饰符中增加了一个virtual,它表示此方法是虚方法,可以被子类重写
{
return "";
}
}
在构建猫这个类时,我们重写“叫”这个方法
Class cat:Animail
{
Public override string Shout()
{//关键字override,表示方法重写
string result="喵";
return result;
}
}
在构建狗这个类时,我们也重写“叫”这个方法
Class Dog:Animal
{
public override string Shout()
{
string result="汪";
return result;
}
}
重写发生在父类和子类之间,声明的是父类,实例化的是子类。本例子实现了多态。
四、小结
重载必须发生在一个类中,方法名相同,参数不同。值得注意的是,方法重载必须通过参数不同来判断调用哪个方法,而不能通过返回值。
重写override一般用于接口实现和继承类的方法改写。值得注意的是,被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有进行覆盖。


猜你喜欢
- 当项目有中多个线程,如何查找死锁?最近,在IDEA上进行多线程编程中老是在给线程加锁的时候,总是会遇到死锁问题,而当程序出现死锁问题时,编译
- 本文实例讲述了Android保持屏幕常亮唤醒状态的方法。分享给大家供大家参考,具体如下:第一步: 首先添加权限:<uses-permi
- 本文实例讲述了C#对二进制数据进行base64编码的方法。分享给大家供大家参考。具体实现方法如下:using System;using Sy
- 今天有朋友问我一道面试题,有5个人抢5个红包,可重复抢,用多线程程序实现,实现方式有多种,分享一下我的思路:应用了阻塞队列的特性。/**
- 前言目前正在练手springboot+vue,因为很多步骤会遇到困难,当时查完资料解决,过一段时间就会忘记,所以决定建个系列记录下来。因为中
- GridView实现桌面图标显示案例,供大家参考,具体内容如下用法与ListView类似,需要以下几步:1、定义实体类2、自定义适配器继承B
- 扩展Hibernate注解@CreationTimestamp,@UpdateTimestamp支持Java8新的时间类型Hibernate
- 前言由于现在网络层已经升级到RxJava2.x相关的了,所以需要做些调整。虽然RxJava1.x和RxJava2.x同属RxJava系列,但
- JVM常用GC日志打印参数1. PrintGC最简单的GC参数。启用配置:-XX:+PrintGC日志如下:根据上面红色方框内的数字1、2、
- 任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的th
- 一、什么是桥接模式:桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥。在现
- Android中判断网络是否连接实例详解在android中,如何监测网络的状态呢,这个有的时候也是十分重要的,方法如下:public cla
- 第一次Eclipse配置Tomcat和JDK都会遇到一些问题,小编当时也一头雾水,所以特对此进行了总结,希望可以帮到大家。A:需要的软件及版
- 花了2天时间,彻底搞清C#中cookie的内容,搞清以下内容将让你对所有网站的cookie都尽在掌握之中.cookieCollection是
- 1.@GrpcServise的作用和优势在没有使用@GrpcServise注解编写服务端时,我们通常需要自定义Server以及端口,包括st
- 一、SpringBoot中的main方法注入service在springboot中使用main方法常规无法注入service,因为以后也可能
- @JsonFormat处理LocalDateTime失效Failed to convert property value of type &
- 1、在pom.xml文件引入依赖<!-- 运行状态监控actuator依赖 --> <depen
- 1 双向链表1.1 双向链表介绍相较单链表,双向链表除了data与next域,还多了一个pre域用于表示每个节点的前一个元素。这样做给双向链
- C#使用GET、POST请求获取结果,这里以一个简单的用户登陆为例。1、 使用GET请求获取结果1.1 创建LoginHandler.asp