我想声明一个抽象类,它有一个变量在其子类中被初始化。例如,假设我们有一个名为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