在onCreate调用期间重新定义Java类的变量?

时间:2012-12-26 21:51:00

标签: java constructor initialization member

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

Country poland = new Country(stability = 3);

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

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

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

2 个答案:

答案 0 :(得分: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

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

默认构造函数的替代和等效语法可以是:

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没有它们。

答案 1 :(得分:0)

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

public Country(int stability)  
{
   this.stability=stability;
}