1
public class Country implements ICountry {
   int stability = 2;
}

Country poland = new Country(stability = 3);

我正在尝试做的是使用具有一些默认值的新类(“Country”)扩展接口(ICountry)。我想知道在创建 Country 类的新实例时是否可以重新定义其中一些默认值。我的示例中的最后一行代码是我目前尝试实现的,但我的 IDE 警告我“稳定性无法解析为变量”。

我的问题是,在不构造方法的情况下实例化类时是否可以重新定义对象的某些默认值?

我刚开始自学 Java 和 Android 编程,所以如果您认为我提到的术语有误,请纠正我。

4

2 回答 2

3

您想要的是定义一个Country接受参数并将其分配给字段的构造函数,如下所示:

public class Country implements ICountry {
   int stability = 2; // the default

   public Country() {
        // no parameters, no assignments
   }

   public Country(int stability) {
       // declares parameter, assigns to field
       this.stability = stability;
   }
}

然后,您可以创建此类的多个实例,如下所示:

Country unitedKingdom = new Country(); // 2 is the value of stability, taken from the default
Country poland = new Country(3); // 3 is the value of stability

你需要有两个构造函数的原因是,如果你没有指定一个构造函数,没有参数的版本(“默认”或“隐式”构造函数)会生成,但是一旦你指定了一个构造函数,它就不会生成不再。

默认构造函数的另一种等效语法可能是:

public class Country implements ICountry {
   int stability; // declare field, but don't assign a value here

   public Country() {
        this.stability = 2; // instead assign here, this is equivalent
   }
}

此版本和以前版本的默认构造函数都产生相同的效果,但通常是偏好问题。

有些语言使用您展示的语法,它们被称为“命名参数”,但 Java 没有它们。

于 2012-12-26T21:56:35.530 回答
0

这就是重载构造函数的用途:

public Country(int stability)  
{
   this.stability=stability;
}  
于 2012-12-26T21:54:16.497 回答