2013-03-27 96 views
-6

這是一些片段作爲編譯結果我們會得到什麼?

public class Overload { 
     public void method(Object o) { 
     System.out.println("Object"); 
     } 
     public void method(java.io.FileNotFoundException f) { 
     System.out.println("FileNotFoundException"); 
     } 
     public void method(java.io.IOException i) { 
     System.out.println("IOException"); 
     } 
     public static void main(String args[]) { 
     Overload test = new Overload(); 
     test.method(null); 
     } 
    } 

這是簡單的代碼。什麼將我們得到的編譯的結果?

+3

你爲什麼不編譯和自己看看? – SudoRahul 2013-03-27 15:25:05

+1

編譯並運行它! – 2013-03-27 15:25:06

+0

您將得到FileNotFoundException – Pragnani 2013-03-27 15:26:33

回答

0

你得到FileNotFoundException異常

而且是你可以運行它,自己看;)

0

難道是「對象」

空不是一個對象,但我知道我懷疑Object o arg將被設置爲null。

+0

剛剛嘗試過,並且確實收到了FileNotFoundException。我愛某人解釋爲什麼 – onesixtyfourth 2013-03-27 15:30:18

3

該程序將打印出「FileNotFoundException」。

這是由於多態方法在Java中的工作方式。 test.method(null)是一個模糊的方法調用,因爲可以使用三種實現中的任何一種。當多個簽名適用於給定參數時,將選擇最具體的子類。

在這種情況下是FileNotFoundException因爲繼承層次是這樣的:

System.Object 
    System.Exception 
    System.SystemException 
     System.IO.IOException 
     System.IO.FileNotFoundException 

一般情況下,程序員應該意識到這種行爲,但不應該試圖利用它。這種代碼可能非常混亂,並且往往會導致意想不到的後果。

相關問題