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

2つのコンストラクターが必要な理由は、パラメーターが指定されていない場合はパラメーターのないバージョン(「デフォルト」または「暗黙の」コンストラクター)が生成されますが、コンストラクターを指定すると生成されないためです。もう。

デフォルトのコンストラクターの代替の同等の構文は、次のようになります。

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 に答える