Javaでは、 コンストラクターの連鎖 を呼び出すシーケンスです コンストラクター オブジェクトを初期化するとき。インスタンスのみを使用して複数のコンストラクターを次々に呼び出したい場合に使用されます。このセクションでは、次のことについて説明します。 Java でのコンストラクター チェーンについて、適切な例を示して詳しく説明します。 簡単に見てみましょう Javaのコンストラクターとは何ですか。
コンストラクタ
で ジャワ 、コンストラクターはメソッドと同じですが、唯一の違いは、コンストラクターの名前がクラス名と同じであることです。クラスのインスタンスを作成するために使用されます。クラスのオブジェクトを作成すると自動的に呼び出されます。戻り値の型はありません。コンストラクターは次のことはできないことに注意してください。 抽象的な 、 最後の 、 同期した 、 そして 静的 。 コンストラクターをオーバーライドすることはできません。
Java には 2 種類のコンストラクターがあります。
- デフォルト コンストラクター (引数なしのコンストラクターとも呼ばれます)
- パラメータ化されたコンストラクタ
コンストラクターの連鎖
コンストラクター チェーンでは、コンストラクターは同じクラス内の別のコンストラクターから呼び出されます。このプロセスは次のように呼ばれます。 コンストラクターの連鎖。 それは継承によって発生します。派生クラスのインスタンスを作成する場合、最初に継承クラス (基本クラス) のすべてのコンストラクターが呼び出され、その後、呼び出しクラス (派生クラス) のコンストラクターが呼び出されます。
コンストラクターの連鎖は次の 2 つの方法で実現できます。
Javaでメソッドを呼び出す方法
コンストラクターの順序を変更しても出力には影響しないことに注意してください。
コンストラクターチェーンの必要性
実行するタスクが 5 つあるとします。これらのタスクを実行するには 2 つの方法があります。単一のコンストラクターですべてのタスクを実装するか、単一のコンストラクターで個別のタスクを作成するかのいずれかです。
コンストラクター チェーン メカニズムを使用すると、単一のコンストラクターで複数のタスクを実装できます。したがって、このような種類の問題に直面したときは常に、コンストラクター チェーンを使用する必要があります。コンストラクターチェーンを使用すると、プログラムをより読みやすく理解しやすくすることができます。
コンストラクターチェーンのルール
- を使用した表現 これ キーワードはコンストラクターの最初の行である必要があります。
- を使用しないコンストラクターが少なくとも 1 つ存在する必要があります。 これ
別のコンストラクターからのコンストラクターの呼び出し
コンストラクターの呼び出しは、次の 2 つの方法で実行できます。
URI と URL
注: 同じコンストラクター ブロック内で、this() と super() を同時に使用することはできません。
Java プログラムを通してこれら 2 つの概念を理解しましょう。
コンストラクターのチェーン例
現在のクラス コンストラクターの呼び出し
を使用しております これ() 同じクラス内で現在のクラスのコンストラクターを呼び出す場合は、キーワードを使用します。 this() の使用は必須です。 JVM のように自動的に配置しないでください。 素晴らしい() キーワード。 this() はコンストラクターの最初の行でなければならないことに注意してください。少なくとも 1 つのコンストラクターが存在する必要があります。 this() キーワード 。
構文:
this(); or this(parameters list);
例えば:
this(); this('Javatpoint');
Java プログラムを作成し、現在のクラスのコンストラクターを呼び出してみましょう。
CSSの下線テキスト
コンストラクターチェーン.java
public class ConstructorChain { //default constructor ConstructorChain() { this('Javatpoint'); System.out.println('Default constructor called.'); } //parameterized constructor ConstructorChain(String str) { System.out.println('Parameterized constructor called'); } //main method public static void main(String args[]) { //initializes the instance of example class ConstructorChain cc = new ConstructorChain(); } }
出力:
上の例では、パラメータを渡さずにクラスのインスタンスを作成しました。最初にデフォルトのコンストラクタを呼び出し、デフォルトのコンストラクタは this() により呼び出しをパラメータ化されたコンストラクタにリダイレクトします。パラメーター化されたコンストラクター内のステートメントが実行され、デフォルトのコンストラクターに戻ります。その後、デフォルト コンストラクター内の残りのステートメントが実行され、オブジェクトは正常に初期化されます。コンストラクターの呼び出しシーケンスは次のとおりです。
ConstructorChain cc = new ConstructorChain(); -> ConstructorChain() -> ConstructorChain(String str) -> System.out.println() -> ConstructorChain() -> System.out.println()
スーパークラスコンストラクターの呼び出し
場合によっては、子クラス (派生クラス) からスーパークラス (親クラス) コンストラクターを呼び出す必要がある場合、派生クラス コンストラクターで super() キーワードを使用します。 super() を記述することは、JVM が自動的に行うため、オプションです。常に最初の行に記述する必要があります。子クラスでスーパークラスのコンストラクターを呼び出そうとすると、構文エラーが発生します。
構文:
super(); or super(Parameter List);
素晴らしい(): スーパークラスの引数なしまたはデフォルトのコンストラクターを呼び出します。
スーパー(パラメータ): これは、スーパークラスのパラメーター化されたコンストラクターを呼び出します。
スーパークラスのコンストラクターはサブクラスに継承できないことに注意してください。 super キーワードを使用してサブクラス コンストラクターから呼び出すことができます。
Java プログラムを作成し、継承されたクラスにコンストラクター チェーンを実装してみましょう。
SSH 完全形式
ConstructorChaining.java
//parent class or base class class Demo { //base class default constructor Demo() { this(80, 90); System.out.println('Base class default constructor called'); } //base class parameterized constructor Demo(int x, int y) { System.out.println('Base class parameterized constructor called'); } } //derived class or child class class Prototype extends Demo { //derived class default constructor Prototype() { this('Java', 'Python'); System.out.println('Derived class default constructor called'); } //derived class parameterized constructor Prototype(String str1, String str2) { super(); System.out.println('Derived class parameterized constructor called'); } } public class ConstructorChaining { //main method public static void main(String args[]) { //initializes the instance of example class Prototype my_example = new Prototype(); } }
出力: