2012-12-01 88 views
1
public class A extends B { 
    private A(B b) { 
     super(b); 
    } 

    public static A parse(string s) // question 1 
    { 
     B result = D.parse(s); 

     return new A(result); // question 2 
    } 

} 

問題1:我不明白這是什麼類型的構造函數(?)。 我覺得一個普通的構造函數什麼看起來像public A().但是這一個:java:這個方法返回什麼?

public static A parse(string s) 

我應該如何解釋呢?

問題2:new A(result); 這是什麼 「新」 做回東西的時候? 該方法是否返回並調用私有構造函數?

+1

你爲什麼不試試? – hd1

+0

@ T.J.Crowder哦,其他課也在擴展B。根據BNF工廠方法的定義A:= C | D – hibc

回答

5

問題1:它根本不是構造函數,它只是一個創建對象的靜態方法。

問題2:new被用來調用類的構造。 new A(...)調用傳遞參數的構造函數A

所以,你必須有在A什麼是不能以正常的方式進行實例化(因爲構造函數是私有)的一類,但是從中可以通過調用A.parse得到實例。在這種情況下,parse通常被稱爲「工廠」方法。

+0

非常感謝你!所以一個parse()只是一個創建A的對象的方法? – hibc

+0

@hibc:它創建'A'實例,是(通過調用私有構造函數)。 –

2

這不是一個構造函數。這是一種靜態方法。而它的返回類型爲A,那麼它將返回A.

return new A(result); 

相當於

A temp = new A(result); 
return temp; 

它調用私有構造函數,它允許創建一個新的實例,然後返回這個新的實例。

你有什麼有一個典型的工廠方法。例如,就像Integer.valueOf(String)一樣。

+0

非常感謝! – hibc