JavaSE_3th_方法的重载

来源:互联网 发布:cad网络拓扑图下载 编辑:程序博客网 时间:2024/06/06 23:52

·方法的重载

Test类中有如下void max(int a, int b)方法用于打印出两个int类型的数中最大的数,但如果实参为float类型或double类型,该方法就不可用了。

class Test {void max(int a, int b) {System.out.println(a > b ? a : b);}}
于是添加了两个方法如下:
class Test {void max(int a, int b) {System.out.println(a > b ? a : b);}void maxFloat(float a, float b) {System.out.println(a > b ? a : b);}void maxDouble(double a, double b) {System.out.println(a > b ? a : b);}}

每次需要根据传入的数来确定方法名,这显然太过麻烦,可以使用方法的重载解决这个问题:

class Test {void max(int a, int b) {System.out.println(a > b ? a : b);}void maxFloat(float a, float b) {System.out.println(a > b ? a : b);}void maxDouble(double a, double b) {System.out.println(a > b ? a : b);}}

方法的重载是指一个类中可以定义有相同名字,但参数不同的多个方法。调用方法时,会根据不同的参数表选择对应的方法。
程序会根据test.max(3, 4)或test.max(2.8, 5.2)来选择调Test类中不同的max方法。
假如需要比较short类型数据的大小,还可以进一步添加short类型数据的max方法:

class Test {void max(int a, int b) {System.out.println(a > b ? a : b);}void max(short a, short b) {System.out.println(a > b ? a : b);}void max(float a, float b) {System.out.println(a > b ? a : b);}void max(double a, double b) {System.out.println(a > b ? a : b);}public static void main(String[] args) {Test  test = new Test();test.max(3, 4);}}
请问test.max(3, 4);是调用的哪一个max方法?short的还是int的?
之前说过,当发生方法重载时,程序会根据实参来判断调用哪一个方法,这里的3和4默认情况是int类型,因此调用的是void max(int a, int b)这个方法,那么要调用void max(short a, short b)方法只要传入的是两个short类型的变量即可:

class Test {void max(int a, int b) {System.out.println(a > b ? a : b);}void max(short a, short b) {System.out.println(a > b ? a : b);}void max(float a, float b) {System.out.println(a > b ? a : b);}void max(double a, double b) {System.out.println(a > b ? a : b);}public static void main(String[] args) {Test  test = new Test();short a = 3;short b = 4;test.max(a, b);//调用的是void max(short a, short b)方法}}
对于如下情况的两个max方法并不构成重载,由于可以不接收带返回值方法的返回值,在直接调用test.max(3, 4)方法时,程序无法得知要调用的到底是哪一个max方法,因此程序会出错,故不构成方法重载。

class Test {void max(int a, int b) {System.out.println(a > b ? a : b);}int max(int a, int b) {return a > b ? a : b;}}
一句话,方法名相同的一些方法,在被调用能够与别的方法区分开而不至于出现混淆的情况,那么这样的方法互相之间构成重载。

· 构造方法的重载
与普通方法一样,构造方法也可以重载,如下所示:
public class Test {public static void main(String[] args) {Person p1 = new Person();Person p2 = new Perosn(2);Person p3 = new Person(3, 40);}}class Person {int id;int age;Person() {id = 1;age = 20;}Person(int _id) {id = _id;age = 30;}Person(int _id, int_age) {id = _id;age = _age;}}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 实况足球俱乐部经理球员老了怎么办 你不是我的菜怎么办 苹果平板电脑耳机有回音怎么办 obs直播有电流音怎么办 语音里网吧很吵怎么办 电脑k歌有延迟怎么办 想开个跆拳道馆怎么办营业执照? 壶嘴拐弯处漏水怎么办 裂纹茶壶嘴坏了怎么办 小孩刚上学怕她上火怎么办 在幼儿园小朋友不愿叠衣服怎么办 孩子在家听话幼儿园不听话怎么办 变魔术时观众说看过这个怎么办 孕妇8个月摔跤了怎么办 孩子吃了残奶怎么办 小米手机变卡了怎么办 主持时说错话了怎么办 小鲜肉老了不红怎么办 同学聚会大家玩手机你怎么办 率土之滨被掠夺怎么办 戒指戴手上取不下来怎么办 择离开我我该怎么办 解小手解不出来怎么办 学生把班里的班费弄丢了怎么办 班里选的班长成绩差怎么办 幼儿园班里孩子发生传染病怎么办 小仓鼠生了该怎么办 把老公生日忘了怎么办 老公说老婆脑子不好怎么办 和上司暧昧被同事发现怎么办 减肥不吃晚餐饿了怎么办 小孩晚饭吃多了怎么办 减肥晚上不吃饭饿了怎么办 两个人在一起性格不合怎么办 赌在你身上输了怎么办 苹果7lcould满了怎么办 e招贷不用了怎么办 牙活动了怎么办还疼 30岁掉了一颗牙怎么办? 在淘宝上交话费交错了怎么办 演出队在小区旁边扰民怎么办