4

こんにちは、Java でのコンストラクターの連鎖について学んでいて、いくつか質問がありました...

  1. まず第一に、いつこれを使用する必要があるか説明してもらえますか? 頭のてっぺんから、私は真剣に状況を考えることができません。

  2. この例では、引数のないコンストラクター内で別のコンストラクターを呼び出します。今後使用するために、この新しい「ジェームズ・ボンド」オブジェクトにアクセスするにはどうすればよいですか?

    import java.util.*;
    
    class Employee
    {   
        private String name;
        private double salary;
    
        public Employee()
        {
            this("James Bond", 34000);
        }
    
        public Employee(String n, double s)
        {
            name = n;
            salary = s;
        }
    
        public String getName()
        {
            return name;
        }
    
        public double getSalary()
        {
            return salary;
        }
    
        public static void main(String[] args)
        {
            Employee a = new Employee();
        }
    }
    
4

5 に答える 5

7

実際、チェーンされたコンストラクターの最も一般的な使用法は、コンストラクターがメンバー変数を設定する以上のことを行う場合だと思います。

static int numOfExamples = 0;
public Example(String name, int num)
{
    this.name = name;
    this.num = num;
    numOfExamples++;
    System.out.println("Constructor called.");
    Log.info("Constructor called");
}

public Example()
{
    this("James Bond",3);
}

そうすれば、静的変数のロギングとインクリメントを 2 回行うためのコードを記述する必要がなくなり、コンストラクターをチェーンするだけで済みます。

于 2013-07-14T15:25:30.953 に答える
1

1)他の人が言ったように、それはコードのメンテナンスのためです。基本的には、コードを1つだけ書くという考え方です。つまり、編集する必要があるのは1回だけです。メソッドと2つを編集するときに何かを見落とすリスクはありません。うっかり違う。

個人的には、これをあなたの例とは異なる方法で使用する傾向があります。そのようです:

Employee() {
    setupStuff();
}

Employee(String name) {
    this();
    this.setName(name);
}

セッターは、クラスでメンバーを設定するよりもはるかに複雑になる可能性があるため、これは良い方法です。したがって、基本的にこれが行うことは、空のコンストラクターとセッターの呼び出しを単一のメソッドに配置することであり、クラスを使用するすべての人にとって非常に簡単になります。

2) 呼び出されるコンストラクターは、別のオブジェクトをまったく作成せず、このオブジェクトを作成します。newキーワードが使用されていないことに注意してください。基本的に、コンストラクター内で別のメソッドを呼び出しているだけですが、そのメソッドがたまたまコンストラクターでもある場合を除きます。

于 2013-07-14T15:22:18.180 に答える
0

今後使用するために、この新しい「ジェームズ・ボンド」オブジェクトにアクセスするにはどうすればよいですか?

名前と給与の値を従業員クラスのフィールドとして保存したため、従業員クラス内ではこれらのフィールドを使用でき、従業員クラス外では従業員クラスの getter/setter メソッドを使用できます。

于 2013-07-14T15:06:23.337 に答える