コンストラクター呼び出しは、コンストラクターの最初のステートメントである必要があります



Constructor Call Must Be First Statement Constructor




super()とthis()は共存できません。それ以外の場合は、コンパイル中に例外が報告されます。



Constructorcallは、コンストラクターの最初のステートメントである必要があります

つまり、super()とthis()の両方がコンストラクターの最初の行にある必要があります。



this(パラメーターあり/パラメーターなし)このクラスの対応するコンストラクターを呼び出すために使用されます

super(パラメーターありまたはなし)は、親クラスの対応するコンストラクターを呼び出すために使用されます

また、コンストラクターでは、呼び出しはコンストラクター定義の最初の行に記述する必要があり、コンストラクターの後に使用することはできません。



コンストラクター関数の定義に、この呼び出しとスーパー呼び出しを同時に含めることはできません。同時にそれを含めたいと仮定すると、this()によって呼び出されるコンストラクターで最初にsuper()呼び出しを行うことができます。 TestB()メソッドを非構造メソッドに変更することもできます。コンストラクターTestB(int i)で呼び出されます。

正しい説明:親クラスのコンストラクターは、サブクラスのコンストラクターの前に呼び出す必要があります。これにより、コンストラクターの親クラスでメソッドを呼び出す場合、親クラスが既に正しく設定されていることが保証されます。

翻訳親クラスのコンストラクターが子クラスのコンストラクターを呼び出す必要がある前。

これにより、親コンストラクターでどのメソッドを呼び出しても、確実になります。親クラスが正しく設定されています。


二。エラー:暗黙のスーパーコンストラクターxx()は、デフォルトコンストラクターに対して未定義です。明示的なコンストラクターを定義する必要があります


親クラスがパラメーター化されたコンストラクターを定義しているため、現時点では、コンパイラーはデフォルトのコンストラクターを呼び出しません。
サブクラスが継承する場合、サブクラスはそれ自体のコンストラクターで親クラスのコンストラクターを明示的に呼び出す必要があります。子クラスが初期化される前に、親クラスがインスタンス化されていることを確認できます。
親クラスにパラメーターのないコンストラクターがあるとすると、サブクラスはそれを呼び出すように強制されません。つまり、あなたが書いたものは合格します、
コンパイラーは、デフォルトで親クラスのコンストラクターを呼び出すのに役立ちます。 A
元のアイデアによると、それは次のようになっている必要があります。

class Person { protected String name protected int age // You have defined your own active constructor, at this time the compiler will not create a default constructor for you public Person(String name,int age) { this.name=name this.age=age } public void print() { System.out.println('Name:'+name+'/nAge:'+age) } } / * Because the constructor of the parent class is parameterized, the compiler will not actively call the default constructor for yourself. at this time. The child class must explicitly call the parent class constructor in its own constructor * / class Student extends Person { public Student () {// Subclass constructor // super () No, because your parent class has no parameterless constructor super('a',1) // Display the constructor that calls the parent class. And must be called on the first line } } class Test { public static void main(String args[]){ } }


転載:https://www.cnblogs.com/liguangsunls/p/6926038.html