エラー:暗黙のスーパーコンストラクターxx()は、デフォルトコンストラクターに対して未定義です。



Error Implicit Super Constructor Xx Is Undefined



public class Father { Protected String a = 'handsome' public Father(String a) { this.a = a System.out.print(a) } public void sex() { System.out.println('Male') } public class Son extends Father { private int b = 1 public Son(int b) { this.b = b } public void sex() { System.out.println('Not male or female') }

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

親クラスがパラメーター化されたコンストラクターを定義しており、親クラスにデフォルトの引数なしコンストラクターがないため、コンパイラーはデフォルトのコンストラクターを呼び出しません。
サブクラスが継承する場合、子クラスが初期化される前に親クラスがインスタンス化されるように、独自のコンストラクターで親クラスのコンストラクターを明示的に呼び出す必要があります。
親クラスに引数のないコンストラクターがある場合、サブクラスは呼び出しを強制しません。つまり、作成したものが渡されます。
コンパイラーは、デフォルトで親クラスのコンストラクターを呼び出します。
元のアイデアによると、それは次のようになっている必要があります。



public class Son extends Father { public Son(String a) { super(a) / / Display the constructor of the calling parent class, and must be the first line call }

そうです、新しい関数がメイン関数でインスタンス化されると

父Fa =新しい息子( '')



親クラスのコンストラクターが初期化されていることは明らかであり、子クラスが現在の関数を初期化する場合は、親クラスを既に表示しているコンストラクターに基づいて、独自のメンバー変数を初期化する必要があります。