0

次のコード行の場合:

public class Base{

    private int num1 = 0;
    private int num2 = 0;
    private static int dif = 0;

    public Base(int num){
         this(num,num+1);
         System.out.println("Base constructor1");
    }

    public Base(int num1, int num2){
         System.out.println("Base constructor2");
         this.num1 = num1;
         this.num2 = num2;
         dif = num2 - num1;
    }

    public int sum(){
        return num1 + num2;
    }

    public static int getDif(){
        return dif;
    }
}

これらの2行は何を出力する必要がありますか?

Base b1 = new Base(10);
Base b2 = new Base(4,7);

次の行を理解できれば、 this(num,num+1);すべてを理解できると思います...

thnx

4

6 に答える 6

2

最初のステートメントBase b1 = new Base(10);は、コンストラクター チェーンの例であり、次の結果が生成されます。

Base constructor2 

Base constructor1

そして2つ目はシンプルです。それは印刷されます

Base constructor2
于 2012-08-14T14:42:50.393 に答える
2
this(num,num+1);

同じオブジェクトで次のコンストラクターを呼び出します

public Base(int num1, int num2){

なんで?

Baseユーザーが単一のパラメーターでコンストラクターを呼び出してオブジェクトを作成した場合、コードは上記のコンストラクターとセットnum2diff値でいくつかのデフォルトの計算を行います。

于 2012-08-14T14:39:36.853 に答える
0

最初の呼び出しで 1 つの整数パラメーターを渡しているため、次のようになります。

Base b1 = new Base(10);

整数パラメーターを 1 つだけ指定してコンストラクターを呼び出し、次のように出力します。

Base constructor1

2 番目の呼び出しは 2 つの整数パラメーターを渡すため、2 つの整数パラメーターを指定してコンストラクターを呼び出し、出力します。

Base constructor2

物事を自分でテストすることをお勧めします。物事を試すことは、学習と理解を深めるための最も簡単な方法です。

于 2012-08-14T14:42:39.717 に答える
0
Base b1 = new Base(10);
Base b2 = new Base(4,7);

これは出力されます:

基本コンストラクター2

基本コンストラクター1

基本コンストラクター2

コンストラクターは連鎖しているため、最初のコンストラクターはb1( public Base(int num1)) のインスタンス化で呼び出され、別のコンストラクター ( public Base(int num1, int num2)) が呼び出され、"Base constructor2" が出力されます。実行は "Base constructor1" を出力するために戻ります。

b2次にインスタンス化され、使用されるコンストラクターが別のコンストラクターにチェーンされないため、「Base constructor2」のみが出力されます。

于 2012-08-14T14:41:01.380 に答える
0

次のように、複数の定義を持つ関数を呼び出すとき

public Base(int num)

public Base(int num1, int num2)

選択されるものは、使用するパラメーターに基づいています。だから、呼び出すことによって

new Base(5);

単一の int のみを使用して、最初のコンストラクターにヒットします。

このコンストラクターは、「両方を定義したいのですが、数値が 1 つしかありません。2 番目のコンストラクターを呼び出して、num2この最初の数値に 1 を加えた値に等しくします。

this(num,num+1); //num == 5

通話

Base(int num1, int num2)

num1 == 5提供された場所num2 == 6、提供された番号に 1 を加えた 。

于 2012-08-14T14:42:58.007 に答える
0

この 2 行を実行すると、次のように表示されます...

Base constructor2
Base constructor1
Base constructor2

コンソールでは、最初のオブジェクト宣言が 1 つのコンストラクターを呼び出してから別のコンストラクターを呼び出し、2 番目の宣言が 2 番目のコンストラクターのみを呼び出すためです。

于 2012-08-14T14:43:27.697 に答える