0

変数をコンストラクター引数で上書きせずに変数の値を取得するにはどうすればよいですか?

例えば:

public class Example {

String something = "";
Scanner sc = new Scanner(System.in);

  public Example()
  {

  }

  public Example(String something){
    this.something = something;
  }

  // Getter method
  public String getSomething() {
    return something;
  }

   public void changeValues() {
   System.out.println("Please change the string!");
   something = sc.next();
   Example set = new Example(something);
   }   
}//example


public class AnotherClass {
    Example test = new Example() 
    // I don't want to overwrite this so I set this to null
    String something2 = test.getSomething(); 
    // the above puts in a null reference instead of the text
  }

コンストラクターの引数について、AnotherClass に何かをハード コードしたくないことと、changeValues メソッドを Example クラスにとどめておく必要があることに注意してください。

編集:何か変数をスペースでインスタンス化し、それを変数に格納する必要があるユーザーにプロンプ​​トを表示し、それをコンストラクターに渡しました。これで、入力の代わりに元のインスタンス化スペースが返されました!

4

1 に答える 1

0

あなたの質問はあまり意味がありません。

  • 「オーバーライド」について話している場合、コンストラクターは継承されていないため、オーバーライドされません。

  • Example変数を「上書き」するためのコンストラクターについて話している場合はsomething、単にデフォルトのコンストラクターを指定します。somethingただし、明示的に初期化しないと、とにかくデフォルトで初期化されるため、何も変更されませnullん。null実際、引数を指定して呼び出した場合、既存のコンストラクターは何も上書きしません。


次に、あなたの奇妙なchangeValues()方法があります:

public void changeValues() {
    System.out.println("Please change the string! ")
    String foo = sc.next();
    Example set = new Example(foo);
}

これが実際に行うことは次のとおりです。

  1. ユーザーにプロンプ​​トを表示する
  2. 文字列を読む
  3. 新しい例のインスタンスを作成し、次に
  4. 捨てる!!

あなたがおそらくやるべきことはこれです:

    something = sc.next();
于 2012-12-14T05:21:22.427 に答える