如何在Java中的抽象类中声明未初始化的变量?

时间:2014-02-20 20:35:39

标签: java inheritance abstract-class

我想声明一个抽象类,它有一个要在其子类中初始化的变量。例如,假设我们有一个名为Country的抽象类,以及一个名为United States的子类。 (我知道,通常你会让美国成为Country的一个实例,但我只是以此为例,让我们假设这是我们想要的设计。)我想要一个public final Set<String>调用bigCities在国家宣布但未初始化,但将在美国初始化为{“纽约”,“洛杉矶”,“芝加哥”}。我该如何做到这一点?

(如果之前有人问我,我很抱歉,但我的问题很难制定出精确的搜索条件。每当我尝试在Google或StackOverflow上搜索时,我都会遇到类似但不是我的问题我正在寻找。)

3 个答案:

答案 0 :(得分:3)

如果您要将自己的属性bigCities定义为final,则必须在类的构造函数中对其进行初始化,例如CountryUnitedStates。< / p>

public abstract class Country {
  public final Set<String> bigCities;
  public Country(Set<String> bigCities) {
    this.bigCities = bigCities;
  }
}

在这种情况下,Country的子类必须使用指定的参数调用父的构造函数。

答案 1 :(得分:1)

有两种方法可以做到这一点。你可以让Country构造函数有一个名为bigCities的参数,而一个子类如UnitedStates会调用super(cities,otherArgs)。

或者,你可以制作一个像这样的抽象方法

protected abstract Set<String> getBigCities();

然后在Country构造函数中,将bigCities设置为该方法的实现。

bigCities = getBigCities();

答案 2 :(得分: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");
    }
}