2011-11-15 45 views
3

以下是與在Java中重載的構造函數相關的代碼。讓我們來看看它。Java中令人困惑的方法重載

package temp; 

final public class Main 
{ 
    private Main(Object o) 
    { 
     System.out.println("Object"); 
    } 

    private Main(double[] da) 
    { 
     System.out.println("double array"); 
    } 

    public static void main(String[] args)throws Exception 
    { 
     Main main = new Main(null); 
    } 
} 

在上面的代碼,構造函數被重載,其中一個具有Object類型的形式參數,而另一個具有類型雙(陣列)的形式參數。


Main main = new Main(null); 

其中一個構造函數是由作爲其實際的參數,並且程序顯示在控制檯上輸出雙陣列其使用值以上聲明調用。在這種情況下,編譯器如何在運行時動態地解析特定的構造函數(或方法,如果是這種情況)?

+1

我不認爲它是重複的;那個問題是關於動態分配的,而在這裏沒有運行時類型,因爲'null'被傳入。 –

回答

4

它在編譯時解析爲double[],因爲它是most specific成員決心:

如果不止一個成員方法既方便和適用於方法調用,[...] Java編程語言使用選擇最具體方法的規則。

2

Java將調用最具體的構造函數。

類實例創建表達式JLS 15.9)和方法調用表達式JLS 15.12

-1

Object是所有類的超類。因此,與參數匹配的最具體類型將被調用,並由此在編譯時解析。

+0

你是什麼意思'因此'?這是一個*非sequitur *。 – EJP