正常に解決されたJavaエラー:暗黙のスーパーコンストラクターXX()が未定義です。別のコンストラクターを明示的に呼び出す必要があります。
Successfully Resolved Java Error
今日、継承に関するコードを書いているときにこの問題に遭遇しました。
暗黙のスーパーコンストラクターXX()は未定義です。別のコンストラクターを明示的に呼び出す必要があります。
public class Parent { String name Parent(String name){ this.name = name } } class Son extends Parent { int age Son(int age){ this.age = age } }
このコードはエラーを報告します。
その理由は:
サブクラスの構築メソッドを呼び出すとき、システムは、superキーワードが使用されているかどうかに関係なく、親クラスの構築メソッドを自動的に呼び出します。
サブクラスのコンストラクターがどのような形式であっても、superキーワードが使用されていない限り、親のパラメーターなしのコンストラクターがデフォルトで呼び出されます。
親クラスのデフォルトコンストラクターはここで上書きされ、パラメーターなしのコンストラクターは記述されません。
解決策1:解決策1:
親クラスに空のメソッドを書き込むか、親クラスのすべてのコンストラクターを削除します。
public class Parent { String name Parent(){} Parent(String name){ this.name = name } } class Son extends Parent { int age Son(int age){ this.age = age } }
解決策2:解決策2:
superキーワードを使用して、呼び出す親クラスのコンストラクターを指定します。
public class Parent { String name Parent(String name){ this.name = name } } class Son extends Parent { int age Son(String name,int age){ super(name) this.age = age } }
参照: