欢迎来到天天文库
浏览记录
ID:41559018
大小:61.61 KB
页数:6页
时间:2019-08-27
《52方法重载,方法覆盖,构建器重载,多态--继承》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、方法和多态(方法重载,方法覆盖,构建器重载,多态)--继承[ITjob课程资料】方法重载(me匕hodoverloading)♦成员方法重载学习重载之前,我们来了解一下在java中方法的特征。在java屮,每一个方法都有自己的特征,其特征主要是指方法名以及方法的参数。voidmethodi(){}voidmethod2(){}methodl()和method2()可以被理解为是两个方法名不同的方法,即方法的特征不一致。voidmethodl(intx){}voidmethodl(){}第一个methodl()与第二个methodl()虽然名字一样,
2、但是却有不同的参数,因此,这两个同名方法仍有着不同的特征。对于java编译器来说,它只依据方法的名称、参数列表的不同来判断两个方法是否相同,如果出现两个名称相同、参数也完全一致的方法,那么编译器就认为这两个方法是完全一样的,也就是说方法被重复定义!以下定义是错误的:classClassName{voidml(){}voidml(){}}对于以上两个方法定义语句,java解释器认为这两个方法完全相同,当执行到第二条语句时,它会告诉你方法ml()已在类ClassName中被定义!可以这样理解,当我们在一个类中不能定义相同名称的多个方法,除非这些方法具有
3、不同的方法特征(参数的不一致)o将上面语句修改为:classClassName{voidml(intx){}voidml(){}}这样,虽然方法名相同,但由于两个方法的参数不一致,因此,编译器就认为这是两个不同的方法,从而不会产牛歧义。好,在这里,大家可能就会质疑,把其屮的某个方法换成不同的名称不也可以正常运行吗?对,这样确实可以解决问题,但我们知道,在现实中,往往一个类会实现复杂的功能,其中定义的多种方法可能实现的功能意义都是一样,比如我们已经熟悉的System类中的静态对象中方法printin(),在该类中printin()被定义了多个,每一个
4、方法都有不同的参数,现在我们已知道每一个printin()都具有相同的功能:在控制台上输岀内容!我们来假想一下,如果按照每个方法定义一个不同名称,那么我们将在System类中定义十多种不同名称的打印方法,虽然功能实现了,首先,我们是否需要编写代码前给这十几种方法取不同名称,并且还得保证名称唯一,这就会增加我们的工作量;其次我们还得记住每一个方法名对应的功能,如果稍有记错,那就会得到错误的结果!因此,我们有更好的解决办法,通过重载,可以在一个类中定义相同名称、不同参数的实现相同功能的多个方法,这样就避免了给每个方法取不同名称、熟记每个不同名的方法对应
5、的功能的额外工作量,提高了我们的开发效率。当一个类中的多个同名方法满足以下条件时之一时,即实现了方法重载:乩不同的参数个数b・不同的参数类型c・不同的参数顺序小测试:以下哪几组方法实现了重载,满足了重载的那一个条件?组一:voidml(intx){}voidml(intX,inty){}组二voidml(intX,Stringstr){}voidml(Stringstr,intx){}组voidml(intX,inty){}voidml(inty.intx){}组四:voidml(intx){}intml(intx,inty){}组五:voidml
6、(intx){}voidm2(intx){}♦构造方法重载如果有一个类带有几个构造函数,那么也许会想复制其屮一个构造函数的某些功能到另一个构造函数中。可以通过使用关键字this作为一个方法调用来达到这个目的。publicclassEmployee{privateStringname;privateintsalary;publicEmployee(Stiringnzints){name=n;salary=s;}publicEmployee(Stringn){this(nz0);}publicEmployee(){this(,fUnknown11);在
7、第二个构造函数中,有一个字符串参数,调用this(nz0)将控制权传递到构造函数的另一个版本,即采用了一个String参数和一个int参数的构造函数屮。在第三个构造函数中,它没有参数,调用this(»Unknownn»)将控制权传递到构造函数的另一个版本,即采用了一个String参数的构造函数中。注:对于this的任何调用,如果出现,在任何构造函数中必须是第一个语句。构造函数中调用另一构造函数,其调用(this()、super())有且只能有一次,并不能同时出现调用。分析例题3(Example3・java)的执行结果。提醒:方法的重载都是基于同一个
8、类!方法覆盖(methodoverriding)覆盖是基于继承的,没有继承就没有覆盖。在java中,覆盖的实现是在子类中对
此文档下载收益归作者所有