这篇文章主要讲解了“Java参数重载的实例用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java参数重载的实例用法”吧!
package someTest;
class SSSuperClass{}
class SSSubClass extends SSSuperClass{}
public class TestDuplicate {
public void function(Object o){ //方法1
System.out.print("Object\n");
}
public void function(int[] array){ //方法2
System.out.print("int[] array\n");
}
public void function(SSSuperClass array){ //方法3
System.out.print("SSSuperClass\n");
}
public void function(SSSubClass array){ //方法4
System.out.print("SSSubClass\n");
}
/**
* @param args
*/
public static void main(String[] args) {
new TestDuplicate().function(new Object()); //调用1
new TestDuplicate().function(new int[3]); //调用2
new TestDuplicate().function(new SSSubClass()); //调用3
new TestDuplicate().function(new SSSuperClass()); //调用4
/**
* 一切都看似很和谐。参数重载可以允许父类和子类关系的存在,
* 调用的时候会根据实际的参数,寻找最为精确匹配的那个函数去执行。
* 如果我们去掉方法4,调用4就会发现方法3才是它最匹配的函数,所以调用之。
* 如果去掉方法3,调用4会发现方法1才是自己的实参最匹配的函数,所以调用之。
* */
/**
* 但是如果我们传入的不是数组,也不是任何对象,而是一个null呢???
* 同样null也会找一个最为精确匹配的函数,但是这里会编译错误。因为这边有两条继承
* 路径,一个是Object->array[],一个是Object->SSSuperClass->SSSubClass。
* 所以方法2和方法4,null就不知道哪个才是最精确的匹配了。
* 所以我们方法3和方法4在下面的调用下不兼容,有歧义。
* */
//new TestDuplicate().function(null); //compile error
//可以看到null虽然是对象,但是却什么都不是,甚至连Object都不是,但是他依然会寻找最为匹配的形参
String s = null;
String ss = "sss";
if(s instanceof String) System.out.print("s is String");
if(ss instanceof String) System.out.print("ss is String");
if(null instanceof Object) System.out.print("null is a Object");
}
}
感谢各位的阅读,以上就是“Java参数重载的实例用法”的内容了,经过本文的学习后,相信大家对Java参数重载的实例用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://www.xuebuyuan.com/3268166.html