C#基础总结——重载和重写(覆盖)
2016-02-03 20:45
225 查看
一、前言:
接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢?因为面向对象具有可复用性、可维护性、可扩展性等优点。
本人之前一直接触的是VB语言,所以正式接触面向对象的编程语言还要从C#开始。前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。
二、定义:
重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型不同。因此重载对返回值没有要求,可以相同,也可以不同。但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。
重写:继承时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同。例如父类方法声明为virtual(虚方法),子类中使用override申明此方法的重写。
三、示例:
重载:
我们建立一个猫类,在这个类中构造两个方法。一个是带参数姓名的方法,另一个是不带参数姓名的方法。这样当我们初始化一个“猫”的对象时,就可以选择给对象起名或者不起名。从而达到扩展的目的。
重写:
比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。
在构建狗这个类时,我们也重写“叫”这个方法
重写发生在父类和子类之间,声明的是父类,实例化的是子类。本例子实现了多态。
四、小结 :
重载必须发生在一个类中,方法名相同,参数不同。值得注意的是,方法重载必须通过参数不同来判断调用哪个方法,而不能通过返回值。
重写override一般用于接口实现和继承类的方法改写。值得注意的是,被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有进行覆盖。
接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢?因为面向对象具有可复用性、可维护性、可扩展性等优点。
本人之前一直接触的是VB语言,所以正式接触面向对象的编程语言还要从C#开始。前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。
二、定义:
重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型不同。因此重载对返回值没有要求,可以相同,也可以不同。但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。
重写:继承时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同。例如父类方法声明为virtual(虚方法),子类中使用override申明此方法的重写。
三、示例:
重载:
我们建立一个猫类,在这个类中构造两个方法。一个是带参数姓名的方法,另一个是不带参数姓名的方法。这样当我们初始化一个“猫”的对象时,就可以选择给对象起名或者不起名。从而达到扩展的目的。
重写:
比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。
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,否则在其子类中只是新定义了一个方法,并没有进行覆盖。
相关文章推荐
- 关于C#中timer类
- C#预处理器指令 ,你造吗??? (●'◡'●)
- c# 在windows服务中 使用定时器
- C# TableLayoutPanel 绘制边框,防闪屏
- C#怎么给PDF添加背景图片
- C#发送邮件-C#教程
- 【C#】装箱与拆箱
- C#动态创建日志文件,若文件存在,追加记录
- C#成神之路<7> 对C#语句的加深理解
- C#如何定义全局变量
- C# 给PDF添加图片背景
- C# 给PDF添加图片背景
- C#学习小记
- C#、OC递归锁
- imos 学习笔记五 抓拍 c#
- imos 学习笔记五 抓拍 c#
- imos 学习笔记四 录像 c#
- imos 学习笔记四 录像 c#
- 【C#之值类型vs引用类型】
- C#设计模式——适配器模式