重载与重写
2015-06-23 12:21
218 查看
重载与重写
面对重载与重写有时会像失忆一样,将这两个内容搞混。在实际运用中,我们一般是不会混的。但在给别人讲述的过程中,可能会出现张冠李戴将两个名词搞混,这是不利于传播的。让我们来一起加深一下:
重载:相同函数名称,不同参数或不同参数类型。举个例子:
这三个类的count()方法就构成了重载关系。很容易就能得出对同一对象的同名方法的调用,正是依靠这参数的不同来区分调用的是哪一个方法。
重写:子类对父类方法的不同实现,即方法体(函数体)执行内容不同。
正是这种重写,实现了多态。
实际上,重载、重写都实现了多态。但重载是同一对象的同一函数名的不同本领;而重写则是虽然各子类对象具体相同的一个函数名,但各自因不同实现而不同。
面对重载与重写有时会像失忆一样,将这两个内容搞混。在实际运用中,我们一般是不会混的。但在给别人讲述的过程中,可能会出现张冠李戴将两个名词搞混,这是不利于传播的。让我们来一起加深一下:
重载:相同函数名称,不同参数或不同参数类型。举个例子:
class Oneclass { public int count(int a,int b) { //两个正整数加法 return a+b; } public double count(double a,double b) { //带小数的两数相加 return a+b; } public double count(double a,string operate,double b) { //多位数的加减乘除运算 switch (operate) { case “+” return a + b; case “-” return a - b; case “*” return a * b; case “/” return a / b; } } }
这三个类的count()方法就构成了重载关系。很容易就能得出对同一对象的同名方法的调用,正是依靠这参数的不同来区分调用的是哪一个方法。
重写:子类对父类方法的不同实现,即方法体(函数体)执行内容不同。
//父类:Animal class Animal{ string food = “食物”; public string eat() { return this.food; //父类对eat()的实现 } } //子类1:Cat class Cat extends Animal{ public string eat() { return this.food = “老鼠”; //子类对eat()的新实现1 } } //子类2:Wolf class Wolf extends Animal{ public string eat() { return this.food = “羊”; //子类对eat()的新实现2 } }
正是这种重写,实现了多态。
实际上,重载、重写都实现了多态。但重载是同一对象的同一函数名的不同本领;而重写则是虽然各子类对象具体相同的一个函数名,但各自因不同实现而不同。
相关文章推荐
- rails 中 preload、includes、Eager load、Joins 的区别
- Python 赋值、浅拷贝、深拷贝的区别?
- 博客的后续
- UI--仿IOS控件之ActionSheet样式 and more..
- TCP相关资料的搜集:如:连接队列
- 将Apache加入到linux系统service
- 我2年学习编程的经验总结
- 简单理解socket
- 利用audio PreviewWidget在Scope中来播放音乐
- S5PV210开发系列三_简易Bootloader的实现
- 【Linux】嵌入式开发,在Linux中使用C语言对Fork函数执行子函数及父函数,命令ps 及 ls 操作
- 开启新的activity获取它的返回值
- UE4学习之材质系统初探
- 充分发挥Node.js程序性能的一些方法介绍
- 简单链式调用的实现技术
- storyboardds 中的视图控制器的 exit (storyboards中的unwind)使用
- 课题第三天
- SCU 4438 Censor (2015四川省省赛C题)
- 【排序算法】归并排序
- Hibernate各种主键生成策略与配置详解