覆盖与重写的区别

覆盖与重写的区别

ID:40886433

大小:18.33 KB

页数:9页

时间:2019-08-09

覆盖与重写的区别_第1页
覆盖与重写的区别_第2页
覆盖与重写的区别_第3页
覆盖与重写的区别_第4页
覆盖与重写的区别_第5页
资源描述:

《覆盖与重写的区别》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、有时候,类的同一种功能有多种实现方式,到底采用那种实现方式,取决于调用者给定的参数。例如杂技师能训练动物,对于不同的动物有不同的训练方式。publicvoidtrain(Dogdog){//训练小狗站立,排队,做算数}publicvoidtrain(Monkeymonkey){//训练猴子骑自行车等}再如某个类的一个功能是比较两个城市是否相同,一种方式是比较两个城市的名字,一种是除了比较两个城市的名字外,还要比较所在国家的名字。publibooleanisSameCity(Stringcity1,Stringcity2){return

2、city1.equals(city2);}publicbooleanisSameCity(Stringcity1,Stringcity2,StirngCountry1,StringCountry2){returnisSameCity(city1,city2)&&Country1.equals(Country2);}在例如java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式。publicstaticintmax(inta,intb)publicstaticintmax(longa,longb)pub

3、licstaticintmax(floata,floatb)以下程序多次调用Math类的max()方法,运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法。//参数为int类型,因此执行max(inta,intb)方法Math.max(1,2);//参数为flloat类型,因此执行max(floata,floatb)方法Math.max(1.0F,2.9F);对于类的方法(包括从父类中继承的方法)如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。重载方法满足以下条件方法名

4、相同方法的参数类型,个数,顺序至少有一项不相同方法的返回类型可以不相同方法的修饰符可以不相同在一个类中不允许定义另个方法名相同,并且参数签名也完全相同的方法。假如存在这样的两个方法,Java虚拟机在运行时就无法决定到底执行哪个方法。参数签名是指参数的类型,个数和顺序。例如:publicclassSample{publicvoidamethod(inti,Strings){}}下面哪个方法可以加入到Sample类中去?publicvoidamethod(Strings,inti)//OKpublicintamethod(inti,Str

5、ings){return0}//NO//不行,参数签名和类中方法一样publicvoidamethod(inti,StringmyString){}//NO//不行,参数签名和类中方法一样publicvoidAmethod(inti,Stings){}//OK//可以,因为Amethod和amethod是两个不同的方法名称。abstractvoidamethod(inti);//NO尽管它的参数列和类中方法参数不一样,但是,此处的Sample类不是抽象类,所以不能包括这个抽象方法。假如把Sample类改为抽象类,就能把这个方法加入到S

6、ample类中了。(源码)publicbooleancompareCity(Stringcity1,Stringcity2){returncity1.equals(city2);}   publicintcompareCity(Stringcity1,Stringcity2){   if(city1.equals(city2)){return1;}else{return0;}}编译错误:compareCity(java.lang.String,java.lang.String)isalreadydefined//compareCity

7、(String,String)方法已经被定义过作为程序的入口main()方法也可以被重载。publicstaticvoidmain(Stringargs[]){}publicvoidmain(Strings,inti){}//可以privatevoidmain(inti,StringmyString[]){}//可以publicvoidmain(Strings)throwsException{}//可以publicfinalstaticintmain(Stringargs[]){}//不可以它已经和已有的main()方法有相同的签名,

8、因此不允许再加到这个类中来。main(java.lang.String[])isalreadydefinedinSample方法覆盖假如有100个类,分别是Sub1,Sub2,Sub3…….Sub100,它们的一个共同行

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。