2013-02-10 62 views
0

嗨我有一個抽象類,它有許多子類。我喜歡使這個抽象類'constrcutor private並創建工廠方法。這個方法應該如何在每個子類中以相同的方式工作?如果我使:調用靜態工廠方法與未知類

return new AbstractClass(); 

我得到的錯誤說:類是抽象的,不能是實例...我應該使用反射嗎?

+0

您無法創建抽象類的對象。您只能創建參考變量。 – kaysush 2013-02-10 17:25:35

+0

你不能使用「new AbstractClass()」,它創建了一個抽象類不可能的新對象。 – 2013-02-10 17:26:06

+1

您可以使用反射並編寫自己的代碼。我爲人會使用依賴注入庫。像Guice或Spring一樣。 – 2013-02-10 17:27:52

回答

0

您可以使用super關鍵字從子類訪問抽象類的構造函數。

public SubClass() { 
    super(); // this will call AbstractClass() 
    // something else that you want to do for this subclass 
} 
0

正如在評論中指出的那樣,不能將new關鍵字與抽象類一起使用。當你使用新的時候,你需要知道真實的類型。

您可以在抽象基類中實現工廠方法,並根據傳遞給create方法和/或某些內部邏輯的參數決定要返回哪個非抽象子類。

或者您可以使工廠方法本身抽象並在每個非抽象子類中實現它以返回該類型的對象。