国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

實例說明Java中的方法重載機制

2019-11-18 10:59:37
字體:
供稿:網(wǎng)友
    本文旨在通過一道測試題目分析java語言中方法重載的機制,幫助讀者更好的把握java語言的基礎(chǔ)知識。

    首先我們先看一道測試題目,源代碼如下所示,你覺得程序能否通過編譯呢,假如可以通過編譯輸出的結(jié)果會是什么呢?
//TestOverLoad.java
public class TestOverLoad
{
 public static void main(String[] args)
 {
  Test test = new Test();
  test.PRint(null);  
 } 
}

class Test
{

 public void print(String some)
 {
  System.out.println("String version print");
 } 
 
 public void print(Object some)
 {
  System.out.println("Object version print"); 
 }

}

答案是可以通過編譯,輸出的結(jié)果是String version print。不知道你猜測的是否準(zhǔn)確是否知道其中的原理,這個題目明顯是考察方法重載的,重載使得java的類可以有具有多個相同方法名的方法。編譯器可以通過方法的參數(shù)的類型和個數(shù)來區(qū)分他們。而返回值和異常是不能作為區(qū)別標(biāo)志的。上面的程序輸出了String version print是遵循了方法重載中準(zhǔn)確性的原則,null是作為一個很非凡的參數(shù)傳給了方法print(),因為你可以認(rèn)為null是String,也可以認(rèn)為null是Object。但是從層次上看Object處在更上層,String是從Object繼續(xù)過來的,調(diào)用print(String some)將更準(zhǔn)確。

    假如在TestOverLoad類中再添加一個方法如下所示,這樣會如何呢?
public class TestOverLoad
{
 public static void main(String[] args)
 {
  Test test = new Test();
  test.print(null);  
 } 
}

class Test
{

 public void print(String some)
 {
  System.out.println("String version print");
 } 
 
 public void print(Object some)
 {
  System.out.println("Object version print"); 
 }
 
 public void print(StringBuffer some)
 {
  System.out.println("StringBuffer version print"); 
 }
}
答案是不能通過編譯,為什么呢?由于StringBuffer和String并沒有繼續(xù)上的關(guān)系,因此編譯器感覺StringBuffer和String作為參數(shù)的方法都很準(zhǔn)確,它就不知道到時候會運行哪個方法了,因此會出現(xiàn)編譯錯誤,這是方法重載中唯一性的原則。假如我們把參數(shù)null修改為"hello world",那么就可以通過編譯并運行輸出String version print了。

    曾經(jīng)在java.sun.com上讀文章看到一篇文章說方法的返回值也是區(qū)別方法的標(biāo)志,其實這是錯誤的。看看下面的程序
public class A

 
 public  int aMethod(String s)
 {
  System.out.println(s);
  return 1; 
 }
 
 public  void aMethod(String s)
 {
  System.out.println(s); 
 }
}
編譯的時候會提示aMethod(String s)方法已經(jīng)定義過的錯誤。實踐證實一切!



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐平市| 临漳县| 新余市| 通山县| 玉环县| 团风县| 洛宁县| 阳春市| 龙海市| 旅游| 尉犁县| 石棉县| 衡阳市| 葵青区| 社会| 德钦县| 荣昌县| 绥宁县| 如皋市| 大姚县| 姜堰市| 秦安县| 梨树县| 东源县| 镇平县| 资兴市| 思南县| 信阳市| 乌拉特前旗| 黄平县| 应城市| 龙江县| 铅山县| 潞城市| 中西区| 额济纳旗| 新田县| 毕节市| 长葛市| 洞口县| 上高县|