Java では、サブクラスの構築プロセス中に、その親クラスのコンストラクターを呼び出す必要があります。これは、継承関係が存在する場合、サブクラスは親クラスの内容を継承する必要があるためです。
答えは次のとおりです。
サブクラス オブジェクトを新規作成する場合は、まず親クラスのオブジェクトを作成する必要があります。このため、サブクラス オブジェクトは親クラス オブジェクトよりも大きくなります。メモリ内の実際の状況。構築メソッドが新しいオブジェクトである場合、それを呼び出す必要があります。これは、親クラス オブジェクトを新規作成する場合、その構築メソッドを呼び出す必要があるためです。
最初のルール: サブクラスの構築プロセス中に、その親クラスの構築メソッドを呼び出す必要があります。クラスの場合、コンストラクターを作成しない場合、コンパイラーはデフォルトのコンストラクターを追加するのに役立ちます。いわゆるデフォルトのコンストラクターはパラメーターのないコンストラクターですが、コンストラクターを自分で作成した場合、コンパイラーは追加しません。そのため、新しいサブクラス オブジェクトを作成するときに、サブクラスのコンストラクターを呼び出す必要がある場合がありますが、サブクラスのコンストラクターでは、基本クラスのコンストラクターを明示的に呼び出しません。つまり、Write 関数はありません。 、たとえば: super();このようには書いていませんが、これだと親クラスのパラメータなしのコンストラクタを呼び出してしまいますので、親クラスにパラメータなしのコンストラクタが存在しない場合はエラーとなります。
2 番目のルール: サブクラスのコンストラクターに基本クラスのコンストラクターへの明示的な呼び出しがない場合、システムはデフォルトで基本クラスのパラメーターなしのコンストラクターを呼び出します。 注: サブクラスのコンストラクターに基本クラスのコンストラクターへの明示的な呼び出しがない場合。サブクラスのコンストラクターがあり、基底クラスにデフォルトのパラメーターのないコンストラクターがない場合、通常、パラメーターを使用して親クラスのコンストラクターを呼び出すには、コンパイル エラーが発生します。
//新しいコンストラクタを定義する場合
public Animal(文字列名) {
this.name = 名前;
}
}
public Dog 拡張動物{
//デフォルトではサブクラスが親クラスを呼び出すため、この時点で親クラスのコンストラクターを明示的に呼び出す必要があります。
//パラメータコンストラクタなし Animal()
パブリックドッグ(){
super("puppy"); //親クラスを呼び出すパラメータ化されたコンストラクタ メソッドを表示します。
.... //サブクラスのコンストラクターメソッドの処理
}
}
// もちろん、親クラスにパラメーターなしのコンストラクターを明示的に記述する場合は、次のようになります。
クラス動物{
プライベート文字列名。
//パラメータのない構築メソッド
public Animal() {
..... //対処する
}
/*
新しいコンストラクターを定義すると、サブクラスにはパラメーターのないコンストラクターがあるため、サブクラスのコンストラクター内で、明示的に呼び出さなくても親クラスのコンストラクターを呼び出すことができます。
サブクラスは、コンストラクター内の親クラスによって定義されたパラメーターなしのコンストラクターを自動的に呼び出します。
*/
public Animal(文字列名) {
this.name = 名前;
}
}