Javaの内部クラスとは何ですか?

公開: 2022-04-29

Javaの内部クラスの概念は、Javaプログラミングの基本です。 Javaでは、ネストされたクラスと内部クラスは、クラス設計の2つの非常に類似しているがわずかに異なるアイデアであり、多くの場合、密接に関連しています。

ネストされたクラスは別のクラス内で定義され、静的なネストされたクラスと非静的なネストされたクラスの2つのタイプがあります。 一方、内部クラスは非静的ネストクラスの一種であり、さらに3つのタイプ(メンバー内部クラス、匿名内部クラス、ローカル内部クラス)があります。

では、これら3つのタイプの内部クラスは何を意味し、それらの用途は何ですか? Java内部クラスに関するこの詳細なガイドで確認するために読んでください。

目次

Javaでの内部クラスの意味

非静的なネストされたクラスまたは内部クラスは別のクラス内で定義され、外部クラス(クラスを囲む)のメンバーにアクセスできます。 逆に、静的ネストされたクラスも別のクラス内で定義されたクラスですが、非静的ネストされたクラスとは異なり、外部クラスのメンバー変数にアクセスすることはできません。 非静的なネストされたクラスの場合、外部クラスのインスタンスを作成する必要はありません。 ただし、内部クラスの場合、内部クラスをインスタンス化できるようにするには、最初に外部クラスをインスタンス化する必要があります。

ソース

Javaの内部クラスのタイプ

Javaでは、内部クラスは次の3つのタイプになります。

  • メンバー内部クラス
  • 匿名の内部クラス
  • ローカルインナークラス

ここで、例を使用して各タイプの内部クラスを理解しましょう。

1.メンバーのインナークラス

Javaのメンバー内部クラスは、クラスの内部でメソッドの外部で作成された非静的なネストされたクラスです。 通常の内部クラスとも呼ばれるメンバー内部クラスは、private、public、default、protectedなどのアクセス修飾子を使用して宣言できます。

メンバー内部クラスの構文は次のとおりです。

クラスアウター{

//コード

クラスインナー{

//コード

}

}

Javaの例のメンバー内部クラス:

以下に示すのは、内部クラスを作成してそれにアクセスする方法を示すプログラムです。 内部クラスをプライベートにし、メソッドdisplay_Inner()を使用してクラスにアクセスします。

クラスDemoOuter{

int num;

//内部クラス

プライベートクラスDemoInner{

public void print(){

System.out.println( "これは内部クラスです");

}

}

//内のメソッドから内部クラスにアクセスする

void display_Inner(){

DemoInner inner = new DemoInner();

inner.print();

}

}

パブリッククラスMyClass{

public static void main(String args []){

//外部クラスのインスタンス化

DemoOuterouter = new DemoOuter();

// display_Inner()メソッドへのアクセス

outside.display_Inner();

}

}

出力:これは内部クラスです

上記の例では、OuterDemoが外部クラス、InnerDemoが内部クラスであり、mainメソッドから呼び出されるメソッドdisplay_Inner()内で内部クラスをインスタンス化しています。

人気のソフトウェアエンジニアリングコースをご覧ください

SL。 いいえ ソフトウェア開発プログラム
1 LJMU&IIITBのコンピュータサイエンスの理学修士 CaltechCTMEサイバーセキュリティ証明書プログラム
2 フルスタック開発ブートキャンプ ブロックチェーンのPGプログラム
3 ソフトウェア開発のエグゼクティブ大学院プログラム-DevOpsの専門分野 すべてのソフトウェアエンジニアリングコースを表示

2.匿名の内部クラス

Javaの匿名内部クラスは、クラス名なしで宣言され、単一のオブジェクトのみが作成される内部クラスです。 Javaの匿名内部クラスは、宣言とインスタンス化を同時に行います。 これらは、クラスまたはインターフェイスのメソッドをオーバーライドする場合に最も役立ちます。

Javaの匿名内部クラスの構文は次のとおりです。

AnonymousInner an_inner = new AnonymousInner(){

public void my_method(){

//コード

}

};

Javaの匿名内部クラスは、次の2つの方法で作成できます。

  1. クラスの使用
  2. インターフェイスを使用する

Javaの例の匿名内部クラス(クラスを使用):

抽象クラス食事{

抽象ボイドeat();

}

クラスTestAnonymousInner{

public static void main(String args []){

食事m=new Meal(){

void eat(){System.out.println( "Bon appetit!");}

};

肉();

}

}

出力:ボナペティ!

Javaの例の匿名内部クラス(インターフェースを使用):

インターフェイスゲーム{

void play();

}

クラスTestAnnonymousInner1{

public static void main(String args []){

ゲームg=new Game(){

public void play(){System.out.println( "アウトドアゲーム");}

};

g.play();

}

}

出力:屋外ゲーム

3.ローカルインナークラス

Javaのローカル内部クラスは、メソッド内で作成されたクラスです。 ローカル変数の場合と同様に、ローカル内部クラスのスコープはメソッド内で制限されたままです。

ローカル内部クラスは、ブロック内で定義されます:メソッド本体、if句、またはforループ。 ローカル内部クラスは、それを囲むクラスのメンバーではありませんが、代わりに、それが定義されているブロックに属します。 したがって、Javaのローカル内部クラスにアクセス修飾子を関連付けることはできませんが、抽象または最終としてマークすることができます。 ローカル内部クラスのメソッドを呼び出す場合は、メソッド内でクラスをインスタンス化する必要があります。

Javaの例のローカル内部クラス:

以下は、外部クラスのメソッド内で宣言されたローカル内部クラスのオブジェクトをインスタンス化する方法を示すサンプルプログラムです。

パッケージinnerClass;

パブリッククラスOuter_Class

{{

//クラスOuter_Classのインスタンスメソッド。

public void display()

{{

//メソッドローカル内部クラスの宣言。

クラスInner_Class

{{

public void msg(){

System.out.println( "これはローカル内部クラスです!");

}

}

//メソッドローカル内部クラスのインスタンスを作成し、オブジェクト参照変数iを使用してmsg()メソッドを呼び出します。

Inner_Class i = new Inner_Class();

i.msg();

}

public static void main(String [] args)

{{

//外部クラスOuter_Classのオブジェクトを作成します。

Outer_Class o = new Outer_Class();

o.display();

}

}

出力:これはローカル内部クラスです!

Java内部クラスの基本を念頭に置いて、そもそもなぜそれらが必要なのかを理解しましょう。

Javaインナークラスの利点

Javaの内部クラスは、3つの重要なユーティリティをテーブルにもたらします。 これらは次のとおりです。

1. Java内部クラスは、プライベートを含む外部/メインクラスのデータメンバーとメソッドにアクセスできるため、特定のタイプの関係を表します。

2. Java内部クラスは、書き込む必要が少ないため、コーディングを大幅に削減します。

3. Javaの内部クラスは、クラスとインターフェースを1つの場所に論理的にグループ化することで、コードの可読性を高め、保守を容易にします。

まとめ

ネストされたクラスの概念は、Javaプログラミングのどこにでもクラスを作成することを簡素化し、柔軟性を追加します。 この点で、これまでの説明ですでに見たように、内部クラスと呼ばれる非静的なネストされたクラスは特に便利です。

最後に、内部クラスの使用が最も適切と思われる2つのインスタンスを示します。 まず、Java内部クラスは、2つのクラスが密接な関係にあり、他のクラスからアクセスできない場合に理想的です。 そして第二に、内部クラスはJavaGUIプログラミングイベント処理では一般的です。 したがって、Java内部クラスは、リスナーとそのGUIコンポーネントが関係する場所で安全に使用できます。

Javaをどこで学ぶべきか疑問に思っていますか?

ソフトウェアエンジニアリングにおけるupGradのジョブリンクPG認定 あなたが探しているものです!

新卒者と最終学年のために特別に設計された、ソフトウェアエンジニアリングにおけるupGradのジョブリンクPG認定は、プログラミングを学び、エントリーレベルのソフトウェアの役割に就きたい人に最適です。 この5か月のオンラインプログラムでは、Java、JavaScript、HTML5、DSA、AWS、MERNなどの最高のソフトウェアスキルを学びます。

プログラムのハイライト:

  • MERNスタック/クラウドネイティブの専門分野
  • 500時間以上のオンライン学習
  • 350時間以上のハンズオントレーニング
  • 50以上のライブセッション
  • 5つの業界プロジェクト
  • 業界の専門家とのネットワーキング
  • 同業者や業界の専門家とのQ&Aフォーラム
  • ティーチングアシスタントや業界メンターからの学習支援

今すぐサインアップして、業界最高の企業から学びましょう!

内部クラスとサブクラスの違いは何ですか?

内部クラスは、別のクラス内にネストまたは定義されているクラスです。 一方、サブクラスは別のクラスから派生したクラスです。 さらに、内部クラスには、ネストされている外部クラスの参照を使用してのみアクセスできますが、サブクラスがプライベート変数を継承していない限り、サブクラスに直接アクセスできます。

Javaのクラス内にクラスを書くことはできますか?

はい、Javaの別のクラス内でクラスを定義できます。 このようなクラスはネストされたクラスと呼ばれ、クラスを1つの場所に論理的に編成できるため、より保守しやすく読みやすいコードを作成できます。 ネストされたクラスは、それを囲むクラスの一部として、public、private、package-private、またはprotectedとして宣言できます。

Java内部クラスをプライベートにすることはできますか?

はい、Java内部クラスはプライベートにすることができます。 ただし、内部クラスがプライベートとして宣言されると、クラスの外部にあるオブジェクトからアクセスすることはできません。 内部クラスと外部クラスは、互いのプライベートインスタンス変数とプライベートメソッドにアクセスできます。 外部クラスまたは内部クラス内にいる限り、修飾子privateとpublicは同じ効果を持ちます。