Java-innerclasses
Java-内部クラス
この章では、Javaの内部クラスについて説明します。
入れ子クラス
Javaでは、メソッドと同様に、クラスの変数もそのメンバーとして別のクラスを持つことができます。 Javaでは、別のクラス内にクラスを作成できます。 内部に記述されたクラスは*ネストされたクラス*と呼ばれ、内部クラスを保持するクラスは*外部クラス*と呼ばれます。
構文
ネストされたクラスを記述する構文は次のとおりです。 ここで、クラス Outer_Demo は外部クラスであり、クラス Inner_Demo はネストされたクラスです。
ネストされたクラスは2つのタイプに分けられます-
- 非静的ネストクラス-これらはクラスの非静的メンバーです。
- 静的ネストクラス-これらはクラスの静的メンバーです。
内部クラス(非静的なネストされたクラス)
内部クラスは、Javaのセキュリティメカニズムです。 クラスをアクセス修飾子 private に関連付けることはできませんが、クラスを他のクラスのメンバーとして持っている場合、内部クラスをプライベートにすることができます。 また、これはクラスのプライベートメンバーへのアクセスにも使用されます。
内部クラスには、定義方法と場所に応じて3つのタイプがあります。 彼らは-
- 内部クラス
- メソッドローカル内部クラス
- 匿名の内部クラス
内部クラス
内部クラスの作成は非常に簡単です。 クラス内にクラスを記述するだけです。 クラスとは異なり、内部クラスはプライベートにすることができ、内部クラスをプライベートに宣言すると、クラス外部のオブジェクトからアクセスできなくなります。
以下は、内部クラスを作成してアクセスするプログラムです。 この例では、内部クラスをプライベートにし、メソッドを介してクラスにアクセスします。
例
ここで、 Outer_Demo は外部クラス、 Inner_Demo は内部クラス、* display_Inner()は内部クラスをインスタンス化するメソッドであり、このメソッドは *main メソッドから呼び出されることがわかります。
上記のプログラムをコンパイルして実行すると、次の結果が得られます-
出力
プライベートメンバーへのアクセス
前述のように、内部クラスはクラスのプライベートメンバーにアクセスするためにも使用されます。 クラスにアクセスするプライベートメンバーがいるとします。 内部クラスを記述し、内部クラス内のメソッド(* getValue()*など)からプライベートメンバーを返し、最後に別のクラス(プライベートメンバーへのアクセス元)からgetValue()メソッドを呼び出します内部クラス。
内部クラスをインスタンス化するには、最初に外部クラスをインスタンス化する必要があります。 その後、外部クラスのオブジェクトを使用して、内部クラスをインスタンス化する方法を次に示します。
次のプログラムは、内部クラスを使用してクラスのプライベートメンバーにアクセスする方法を示しています。
例
上記のプログラムをコンパイルして実行すると、次の結果が得られます-
出力
メソッドローカル内部クラス
Javaでは、メソッド内にクラスを記述できます。これはローカル型になります。 ローカル変数と同様に、内部クラスのスコープはメソッド内で制限されます。
メソッドローカルの内部クラスは、内部クラスが定義されているメソッド内でのみインスタンス化できます。 次のプログラムは、メソッドローカルの内部クラスの使用方法を示しています。
例
上記のプログラムをコンパイルして実行すると、次の結果が得られます-
出力
匿名の内部クラス
クラス名なしで宣言された内部クラスは、*匿名内部クラス*として知られています。 匿名の内部クラスの場合、それらを同時に宣言およびインスタンス化します。 通常、クラスまたはインターフェイスのメソッドをオーバーライドする必要がある場合は常に使用されます。 匿名の内部クラスの構文は次のとおりです-
構文
次のプログラムは、匿名の内部クラスを使用してクラスのメソッドをオーバーライドする方法を示しています。
例
上記のプログラムをコンパイルして実行すると、次の結果が得られます-
出力
同様に、匿名内部クラスを使用して、具象クラスのメソッドとインターフェイスをオーバーライドできます。
引数としての匿名内部クラス
一般に、メソッドがインターフェイスのオブジェクト、抽象クラス、または具象クラスを受け入れる場合、インターフェイスを実装し、抽象クラスを拡張し、オブジェクトをメソッドに渡すことができます。 クラスである場合、メソッドに直接渡すことができます。
ただし、3つの場合すべてで、匿名の内部クラスをメソッドに渡すことができます。 ここにメソッドの引数として匿名の内部クラスを渡す構文があります-
次のプログラムは、メソッド引数として匿名内部クラスを渡す方法を示しています。
例
上記のプログラムをコンパイルして実行すると、次の結果が得られます-
出力
静的ネストクラス
静的内部クラスは、外部クラスの静的メンバーであるネストされたクラスです。 他の静的メンバーを使用して、外部クラスをインスタンス化せずにアクセスできます。 静的メンバーのように、静的にネストされたクラスは、外部クラスのインスタンス変数とメソッドにアクセスできません。 静的なネストされたクラスの構文は次のとおりです-
構文
静的なネストされたクラスのインスタンス化は、内部クラスのインスタンス化とは少し異なります。 次のプログラムは、静的なネストされたクラスの使用方法を示しています。
例
上記のプログラムをコンパイルして実行すると、次の結果が得られます-
出力