Javaプロジェクトノート暗黙のスーパーコンストラクターは、デフォルトコンストラクターに対して未定義です。明示的なcを定義する必要があります



Java Project Notes Implicit Super Constructor Is Undefined



class People{ private String name public People(String name) {} } class Man extends People{}

エディターは、暗黙のスーパーコンストラクターがデフォルトコンストラクターに対して未定義であることを要求します。明示的なコンストラクターを定義する必要があります
どういう意味ですか
暗黙的な親クラスの構築メソッドはデフォルトの構築メソッドとして定義されておらず、明確な構築メソッドを定義する必要があります)、エディタープロンプトを使用すると、次のコードが自動的に生成されます。

class Man extends People{ public Man (String name) { super(name) } }

主に2つの側面から、エラーの原因を分析します。
1.デフォルトの構築方法が生成されます
2.サブクラス構築メソッドは、デフォルトで親クラスの非パラメーター構築メソッドになります



デフォルトの構築メソッド:Javaでは、クラスが構築メソッドを定義していない場合、コンパイラーはデフォルトで非パラメーター構築メソッドの生成を支援します。工法が定義されている場合、パラメータのない工法は生成されません。パラメータの作成方法は次のようになります。

public People() { }

しかし、実際の状況は私たちが今見ているものではありません。 Javaの継承では、サブクラスが親クラスの構築メソッドを表示しない場合、サブクラスの構築メソッドは親クラスの構築メソッドを呼び出す必要があるため、これが当てはまらないのはなぜですか。



次に、コンパイラは親クラスのパラメータなしの構築メソッドを暗黙的に呼び出すため、エラーが報告される理由と修復方法を説明できます。前の例では、コンパイラーによって生成されるデフォルトの構築方法は次のとおりです。

public Man(){ super() }

コンパイラーはパラメーターなしの構築メソッドを生成すると同時に、親クラスのパラメーターなしの構築メソッドsuper()を呼び出します。親クラスはパラメーター化された構築メソッドを定義するため、パラメーターなしの構築メソッドはありません。エラーを引き起こします。

だからそれはこのように解決されるべきです



パラメータのない構築メソッドを親クラスに追加します

public People(){}

サブクラスは、独自のパラメーターなしまたはパラメーターなしの構築メソッドを定義し、superキーワードを使用して、親クラスのパラメーター化された構築メソッドを表示します。これは、親クラスにパラメーターなしの構築メソッドがないためです(Javaは、親クラスにパラメーターなしの構築メソッドを呼び出します。デフォルト)

親クラスのカスタム構築メソッドを削除し、デフォルトの構築メソッドを使用します

デフォルトのコンストラクタ

Java言語では、各クラスに少なくとも1つのコンストラクターがあります。プログラムで構築方法が明示的に定義されていない場合、

次に、Java言語は暗黙のデフォルト構築メソッドを自動的に提供します。構築方法がプログラムで明示的に定義されている限り。

その場合、Java言語は暗黙のデフォルト構築メソッドを提供しなくなります。

サブクラスが親クラスの構築メソッドを呼び出さなければならない理由

子クラスは親クラスを継承するため、親クラスの特性と動作を継承します。したがって、子クラスを初期化するときは、親クラスが自身のデータを初期化する方法を確認する必要があります。サブクラスは、スーパークラスのコンストラクターを呼び出して、スーパークラスのプライベート変数を初期化し、その他の追加作業を行います。したがって、子クラスがオブジェクトを初期化するときは、最初に親クラスのコンストラクターを呼び出します

結論:1つのクラス(特に親クラス)に参加するようにしてください
プロジェクト開発のリスクを回避するために、パラメータのあるものとないものを含む、さまざまなパラメータ構築方法を使用します