Java中的重载方法之匹配优先级
来源:互联网 发布:java接收json对象 编辑:程序博客网 时间:2024/05/23 12:24
之前写过一篇关于重载方法的。
http://blog.csdn.net/uncle_gy/article/details/78006215
示例代码:
import java.io.Serializable;import java.lang.Comparable;public class Overload{ public static void sayHello(Object arg){ System.out.println("Hello Object"); } public static void sayHello(byte arg){ System.out.println("Hello byte"); } public static void sayHello(short arg){ System.out.println("Hello short"); } public static void sayHello(char arg){ System.out.println("Hello char"); } public static void sayHello(int arg){ System.out.println("Hello int"); } public static void sayHello(long arg){ System.out.println("Hello long"); } public static void sayHello(float arg){ System.out.println("Hello float"); } public static void sayHello(double arg){ System.out.println("Hello double"); } public static void sayHello(Character arg){ System.out.println("Hello Character"); } public static void sayHello(char... arg){ System.out.println("Hello char..."); } public static void sayHello(Serializable arg){ System.out.println("Hello Serializable"); } public static void sayHello(Comparable<Character> arg){ System.out.println("Hello Comparable<Character>"); } public static void main(String[]args){ sayHello('a'); }}
输出结果1:
此时输出结果是:Hello char
如果注释掉参数是char的方法则输出结果是:Hello int
如果再注释掉参数是int的方法则输出结果是:Hello long
如果再注释掉参数是long的方法则输出结果是:Hello float
如果再注释掉参数是float的方法则输出结果是:Hello double
结果分析1:
因为此时char类型的'a'
除了可以代表有个字符串还可以代表数字97索引如果注释掉参数为char的方法则会自动转型到int。
如果继续注释则会按照:
char
输出结果2:
如果继续注释只保留:
public static void sayHello(Character arg){ System.out.println("Hello Character"); } public static void sayHello(char... arg){ System.out.println("Hello char..."); } public static void sayHello(Serializable arg){ System.out.println("Hello Serializable"); } public static void sayHello(Comparable<Character> arg){ System.out.println("Hello Comparable<Character>"); }
输出结果为:Hello Character
此时如果再次注释掉参数为Character的方法可以发现编译器报出如下错误:
如果注释掉参数为Serializable
或者Comparable<Character>
中的一个则输出结果为: Hello Comparable<Character>
或者Hello Serializable
如果把参数为Serializable
或者Comparable<Character>
的方法都注释掉则输出结果为: Hello char...
结果分析2:
在没有了基本类型参数的方法或者没有类型安全的基本类型参数方法不存在的情况下会产生依次装箱操作,char
在没有了参数为Character的方法的情况下,会找不到装箱类,但是如果找到了装箱类实现的接口类型则同样可以实现匹配(这里应该是上转型)Character类实现的接口:
可以看到一共实现了两个接口Serializable
和Comparable<Character>
,此时以Serializable
或者Comparable<Character>
的方法优先级相同。编译器无法确定要使用的静态类型,于是报错。如果想使用必须显示指明,比如:sayHello(Serializable 'a');
变长参数类型charHello char...
- Java中的重载方法之匹配优先级
- 关于java重载(重载方法匹配优先级)
- 关于Java重载方法匹配优先级
- java重载方法匹配的优先级
- java中的方法重载
- java中的方法重载
- java中的重载方法
- java中的重载方法
- Java中的方法重载
- 方法重载的优先级
- java重载-方法重载中的准确性原则
- java重载-方法重载中的准确性原则
- java中的方法重载 overload
- Java中的方法重载应用
- 重载方法匹配算法
- java笔记之方法重载
- java学习之方法重载
- java之方法的重载
- 数据挖掘_推荐系统
- 堆和栈
- 1701 H2 11.9 王建瑜 连续第五天
- 嵌入式软件开发需要学习的书
- git初用
- Java中的重载方法之匹配优先级
- thinkphp 报错:Call to undefined function think\captcha\imagettftext()
- .net MVC 随笔5
- Android Studio下操作GitHub代码库
- 将光源信息应用到立方体(二)
- python 相对路径引入包
- 软件构建的经验性方法
- 网站性能优化之_页面静态化
- Java值传递和引用传递