なぜthis()
がコンストラクタチェーンの最初のステートメントに含まれる必要がありますか?異なる引数を持つ `this()`が親コンストラクタで動作しないのはなぜですか?
this()
複数の引数を持つ複数のコンストラクタが最終コンストラクタで機能しないのはなぜですか?私は、コンストラクタA(int x,int y,int c)
で複数のthis()
を使用できない理由
package thislatest;
public class ThisLatest {
public static void main(String[] args) {
A a1= new A(10,20,30);
a1.display();
}
}
class A
{
int x,b;
static int c;
A(){ System.out.println("constructor chaining1");}
A(int y)
{ //this();
System.out.println("constructor chaining2");
b=y;
}
A(int x,int y)
{
// this(x);
System.out.println("constructor chaining3");
x=x;
x=y;
}
A(int x,int y,int c)
{ this();
this(y);
this(x,y);
x=x; //self reference initialised by previous constructor
b=y; //no need of this keyword since name is different
this.c=c; //current instance variable or A.c=c will also work
}
void display()
{
System.out.println(x+b); //wrong result due to self reference
System.out.println(c+b); //correct reference
}
}
?
なぜこれが最初のステートメントである必要がありますか?
言語の流れを維持するだけですか?
私は初心者が簡単な言葉を使用してください:)
よく読んでくださいhttp://stackoverflow.com/questions/1168345/why-does-this-and-super-have-to-be-the-first-statement-in-a-constructor?rq=1 –
私は同じタイプの質問をする前にstackoverflow答えを読んでいます。私はそれらの答えを理解していない – ekaf
あなたは副作用なしにプライベートイニシャライザメソッドで行うことができます。しかしコンストラクタを尋ねる場合は、最後のフィールドでは、多くのコンストラクタでこの最終フィールドを初期化すると、最終フィールドを何度か初期化でき、これが問題になると考えるべきです。 –