Java学习资料-方法覆盖、方法重载、多态与动态绑定

1、方法覆盖

方法覆盖就是子类定义一个和父类同名的方法来覆盖父类的方法。当父类方法在某些子类中被覆盖后,通常是子类调用父类,并做一些额外的其它工作。

使用方法覆盖应注意下面一些事项:

不使用super而希望引用父类方法会导致无限的递归,因为子类方法实际上是在调用它自己。

当通过父类引用调用一个方法时,Java会正确地选择与那个对象对应的类的覆盖方法。对于父类提供的方法,子类可以覆盖它,但这不是必须的,即子类也可以使用一个方法的父类版本。

方法覆盖中,子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即与父类完全相同的方法名、返回l类型和参数列表。

子类可以添加字段,也可以添加方法或者覆盖父类中的方法。但继承不能去除父类中的任何字段和方法。

2、方法重载

方法重载是在自己的类内定义几个方法名相同但参数列表不同的过程。与上面讲的方法覆盖不同,方法覆盖是子类覆盖父类的方法,而方法重载是在自身一个类内进行定义的方法,只是定义的这些方法名相同但参数列表不同。

既然在一个类中出现了相同的方法名,或许就有人问了,那程序在调用这些方法时是怎样进行的。其实,当程序在调用这些方法时,编译器是通过区分它们的参数列表来进行区分的。例如,现在有两个重载的方法,有的方法参数列表有一个参数,而另外一个有两个参数,当程序调用这个方法时,编译器会通过查找你要调用的方法里面的参数个数来确定你要调用哪个方法。所以,如果在重载过程中发现有两个或两个以上方法的参数列表一致,编译器则会报错,因为它不能区分你到底要哪个方法。

Java中允许对任何方法重载。同时要注意,如果重载的两个方法中两个方法的名字和参数列表一致,但方法返回类型不一样,这种情况也会编译出错,因为这是不能区分重载方法的。

3、多态分为两种:

多态分为编译时的多态和运行时的多态。

编译时的多态是通过函数重载或运算符的重载来实现的。而运行时的多态是通过继承和虚函数来实现的,之所以称为运行时的多态是因为在程序执行之前,根据函数和参数还无法确定应该调用哪一个函数,而必须在程序的执行过程中,根据具体的执行情况才能动态地确定。

调用一个对象方法的机制:

编译器检查对象的声明类型和方法名。

编译器接着检查方法调用中的参数类型。如果编译器不能找到任何同参数类型匹配的方法,或者有多个方法都匹配转化后的参数类型,那么编译器会报告一条错误。现在编译器知道了需要调用的方法的名字和参数类型。

如果方法类型为private、static、final或者是一个构造器,那么编译器也会准确地知道应该调用哪个方法,这称作静态绑定。与此相反,靠隐式参数的实际类型来决定调用哪个方法叫做动态绑定,这必须发生在运行时。

时间: 2024-11-08 10:21:40

Java学习资料-方法覆盖、方法重载、多态与动态绑定的相关文章

wxWidgets初学者导引(4)——wxWidgets学习资料及利用方法指导

wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 4 wxWidgets学习资料及利用方法指导 初学者常苦于找不到参考资料.实际上,是找不到,不是没有.真正有用的资料,常常也就在手边,只是不知道.有能力熟练地使用一切能用得着的资料,这是水平提高的指标之一.这种能力,同样,也是在实践中获得,而不是有谁为你讲一堂课就能得

Java学习-025-类名或方法名应用之二 -- 统计分析基础

前文讲述了类名或方法的应用之一调试源码,具体请参阅:Java学习-025-类名或方法名应用之一 -- 调试源码 此文主要讲述类名或方法应用之二统计分析,通过在各个方法中插桩(调用桩方法),获取方法的调用关系.通过调用关系,我们可以统计出被调用次数比较多的方法,同时也可以构建全系统调用关系链:通过操作重要业务流程,可以统计组成重要业务流程的主要方法,加强相应的单元测试.功能.安全.性能等方面的测试.对于软件产品质量控制存在非凡的意义. 下面构建的演示示例调用关系如下所示: GetClassMeth

Java学习-025-类名或方法名应用之一 -- 调试源码

上文讲述了如何获取类名和方法名,敬请参阅: Java学习-024-获取当前类名或方法名二三文 . 通常在应用开发中,调试或查看是哪个文件中的方法调用了当前文件的此方法,因而在实际的应用中需要获取相应的包名.类名.方法名.行数,从而快速定位,及统计方法被调用的次数,生成类方法关系链. 相信爱钻研的小主们,通过上篇文章,已经懂得了,如何获取主调方法.从调方法.那我直接上码了,敬请各位小主参阅,若有不足之处,敬请各位大神指正,不胜感激! GetClassMethodName.java 源码内容如下所示

2015最新最全Java学习资料下载

Java学习资料下载大全 : java的开发建议使用jbuilder.eclipse或是netbeans  eclipse在这里免费下载:http://www.eclipse.org/downloads/ netbeans在这里免费下载:http://dlc.sun.com.edgesuite.net/netbeans/6.0/final/ 教程的话,你可以看看这个: 网盘下载地址:http://pan.baidu.com/s/1hqLl3Vm 密码直通车:521595826(扣扣qun) 精通

动力节点java学习资料下载地址

动力节点java学习资料下载地址百度云:http://pan.baidu.com/s/1pJ4qNph 如果您对动力节点有兴趣,可以登录官网看看免费教学视频:http://dwz.cn/29yALNN java学习交流QQ群:425519751

【资源】Java学习资料 - 逆天整理 - 精华无密版【最新】【精华】

入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~  01.Java基础 01.Java 黑马程序员 http://pan.baidu.com/s/1ntkRhBN 链接: http://pan.baidu.com/s/1eQ5yfUM 密码: 9vad 02.传智播客java基础班 http://pan.baidu.com/s/1pJqmFCB 链接: http://pan.baidu.com/s/1mg7THgc 密码: sved 03.传智播客2014上海java培训

Java学习篇之数组方法

Java中数组常用方法的总结(学习过程中看到的一篇关于Java数组的常用方法,希望能给大家提供帮助) 一.Java标准类库提供static方法System.arraycopy(),用它复制数组比用for循环复制要快得多,     System.arraycopy()针对所有的类型做了重载,需要5个参数. 第一个参数:源数组. 第二个参数:偏移量,即从哪个位置开始复制的索引. 第三个参数:目标数组. 第四个参数:偏移量. 第五个参数:要从源数组中复制到目标数组元素的个数,一般情况下为目标数组的长度

100天JAVA学习计划03-浅谈方法

今天是第三天啦,哦,今天是3月30号,一个伟大的日子,本博主的生日! 今天主要简单的了解一下Java中的方法! 在上一篇文章中已经提到了方法长啥样,可能有些小伙伴会说,好像跟C语言里的函数差不多嘛(PS:原谅我会不止一次的提到C语言,毕竟这是博主写代码的启蒙语言!).从长相上来看,确实差不多,但是地位上可差远了,Java可不是颜控哟!Java之所以称之为面向对象的语言,自然地位最高的就是类和对象,而C语言是结构化的语言,所以在C中函数才如此的重要!在Java中,方法的地位是永远赶不上类和对象的,

java学习资料

必须养成好的的编码习惯:缩进(用空格).注释.命名约定. 大小写敏感. 单独的":"代表一条空语句. main函数是我们整个程序的执行入口所以必须是静态公开的. 必须写成这样:  public static void main(String[]args){...} 生成jar包: 在eclipse里,选中要打包的几个文件,右键-Export-写文件名-Next-Next-选main方法的class-finish 在jar包的同一文件夹下,新建一个空文档,写"java -jar