我想聲明一個抽象類,它有一個變量在其子類中被初始化。例如,假設我們有一個名爲Country的抽象類和一個名爲United States的子類。 (我知道,通常你會讓美國成爲國家的一個實例,但我只是以此爲例,所以我們假設這是我們要做的設計。)我想要一個叫做bigCities的public final Set<String>
但在國家未初始化,但將在美國初始化,如{「紐約」,「洛杉磯」,「芝加哥」}。我怎麼做到這一點? (我很抱歉,如果它之前被問過,但我的問題是很難制定精確的搜索條件。每當我嘗試搜索Google或StackOverflow時,我得到的問題類似但不是什麼我在找。)如何在Java中的抽象類中聲明未初始化的變量?
2
A
回答
3
如果要定義你的財產bigCities
爲final
它必須在類的構造函數中被初始化,無論是Country
或你的情況UnitedStates
。
public abstract class Country {
public final Set<String> bigCities;
public Country(Set<String> bigCities) {
this.bigCities = bigCities;
}
}
在這種情況下Country
子類必須調用與指定參數的父類的構造函數。
1
有兩種方法可以做到這一點。你可以讓Country構造函數有一個名爲bigCities的參數,而像UnitedStates這樣的子類可以調用super(cities,otherArgs)。
或者,您也可以使一個抽象的方法,這樣
protected abstract Set<String> getBigCities();
,然後在國家的構造,設置bigCities該方法的實現。
bigCities = getBigCities();
0
abstract class Country {
public final Set<String> bigCities;
protected Country(String... bigCities) {
this.bigCities = new HashSet<String>(Arrays.asList(bigCities));
}
}
class USA extends Country {
USA() {
super("NY", "Chicago");
}
}
相關問題
- 1. scala - 未初始化的變量聲明
- 2. Java初始化抽象類
- 3. 變量初始化並聲明後可能尚未初始化
- 4. java中的變量初始化和聲明問題
- 5. 在Java中聲明的未初始化變量會怎樣?它有價值嗎?
- 6. 變量聲明和初始化在Java中
- 7. 變量可能未被初始化(抽象類)
- 8. java變量未初始化
- 9. C++如何聲明和初始化類中的向量
- 10. 聲明和初始化在java中
- 11. 初始化靜態final變量聲明與初始化在Application.OnCreate()
- 12. 如何在抽象類中聲明List變量
- 13. 如果聲明中的數組聲明和初始化Java
- 14. Java初始化/對象聲明
- 15. Java - 對象聲明和初始化
- 16. 聲明和初始化全局變量
- 17. Maya MEL變量聲明和初始化
- 18. 聲明和初始化結構變量
- 19. C++:變量聲明初始化順序
- 20. 抽象類初始化
- 21. 指針聲明,但未初始化的變量用C
- 22. 使用'simpledialog'時聲明的變量未初始化
- 23. C#靜態字典在抽象類中聲明和初始化.NET 2.0
- 24. 聲明和初始化Java開關內的變量
- 25. 優選的方式聲明和初始化實例/類變量
- 26. 如何初始化Java類中的所有變量爲零
- 27. java初學者:初始化類變量
- 28. 初始化對象時,實例變量始終未初始化?
- 29. 在C++中初始化抽象基類的子類的數組
- 30. 在聲明中初始化全局變量值
我可能有超類,它是各種參數的構造函數,所以子類必須明確地具有價值 – njzk2
你嘗試過什麼叫呢?堆棧溢出是爲了在用盡自己的資源後幫助解決問題。這是一個非常基本的問題,所以雖然提供答案很容易,但答案不會解決潛在的困惑(因爲我們無法看到卡住的位置) – gravityplanx
我有50個這樣的問題就像bigCities一樣。我寧願不必將所有的函數都作爲參數,因爲這會使代碼看起來非常混亂。有沒有辦法解決這個問題? – Tony