一个类中可以由多个方法具有相同的名字,但这些方法的参数必须不同,
参数不同是指满足下列之一:
参数的个数不同参数的个数相同,但参数列表中对相应的某个参数的类型不同参数类型存在自动提升
以byte a = 1为例,存在如下自动提升方式:
byte–> short–> int –> long –> float –> double –> integer –>object
java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载
基本类型能从一个较小的类型自动提升至一个较大的类型,此过程涉及重载时,可能会造成一些混淆。
public class test { /** * 测试涉及基本类型的重载 */ public static void main(string[] args) { system.out.print("char类型重载:"); char x='x'; f1(x);f2(x);f3(x); system.out.print("byte类型重载:"); byte y=0; f1(y);f2(y);f3(y); system.out.print("short类型重载:"); short z=0; f1(z);f2(z);f3(z);f4(z); 婴儿肥 } public static void f1(char x){system.out.print("f1(char)");} public static void f1(byte x){system.out.print("f1(byte)");} public static void f1(short x){system.out.print("f1(short)");} public static void f1(int x){system.out.print("f1(int)");} public static void f1(long x){system.out.print("f1(long)");} public static void f1(float x){system.out.print("f1(float)");} public static void f1(double x){system.out.print("f1(double)");} public stati重庆专科学校排名c void f2(short x){system.out.print("f2(short)");} public st元旦放假几天atic void f2(int x){system.out.print("f2(int)");} public static void f2(long x){system.out.print("f2(long)");} public static void f2(float x){system.out.print("f2(float)");} public static void f2(double x){system.out.print("f2(double)");} public static void f3(int x){system.out.十四运开幕式时间几点print("f3(int)");} public static void f3(long x){system.out.print("f3(long)");} public static void f3(float x){system.out.print("f3(float)");} public static void f3(double x){system.out.print("f3(double)");} public static void f4(long x){system.out.print("f4(long)");}}
输出:
char类型重载:f1(char)f2(int)f3(int)
byte类型重载:f1(byte)f2学英语方法(short)f3(int)
short类型重载:f1(short)f2(short)f3(int)f4(long)
结论:
1)如果传入的数据类型小于方法中声明的形参类型,实际数据就会被提升。
2)char类型有所不同,如果无法恰好找到char参数的方法,但是int参数方法存在时,char直接提升至int型。
3)反过来,如果传入的实际参数大,而形式参数类型小,则需要通过强制类型转换(窄化转化),否则编译器报错。
1)根据调用的方法名,查找是否有定义好的同名方法,如果没有就会报错
2)比较形参和实参的数目是否相等,如果没有则会报错。如果有一个或多个方法符合条件,这些方法进入候选集
3)与候选集中的方法比较参数表,如果对应位置上的每个参数类型完全匹配,或者可以通过扩展转换相匹配,则该方法称为可行方法,并入可行集。若不存在可行方法,则会报错
4)在可行集中按照下面的原则选取最佳可行方法
1)若每一个参数都可以完全匹配,它就是最佳可行方法
2)若某个方法的每一个参数都不比别的方法差,且至少有一个参数比别的方法好,它就是最佳可行方法,这里的差和好是指,完全匹配要比扩展转化好,不过同样是扩展转换,仍然存在好喝差的问题,扩展转换有两条路径
byte-short-int-long-float-double
char-int-long-float-double
这两条路径中位于左边的类型都可以转换为右边的类型,不过源类型与目标类型的距离越近,则这种转化就越好。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-05 00:58:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/4cdcdb9981911ee8f02cb664b497b716.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:java方法重载和参数类型自动提升方式.doc
本文 PDF 下载地址:java方法重载和参数类型自动提升方式.pdf
留言与评论(共有 0 条评论) |