Java の内部クラスの概要
内部クラスは理解するのが簡単ではありませんが、平たく言えば、あるクラスには別のクラスも含まれているという意味です
人間が脳、手足、器官などの体の部分で構成されているのと同じように、内部クラスは臓器の 1 つ、心臓など: 独自の属性と動作 (血液、鼓動) もあります
明らかに、ここでは心臓を属性やメソッドで一方的に表すことはできませんが、クラスが必要です
そして心臓外部クラスの内部にある内部クラスです
例 1: 内部クラスの基本構造
//外部类 class Out { private int age = 12; //内部类 class In { public void print() { System.out.println(age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out().new In(); in.print(); //或者采用下种方式访问 /* Out out = new Out(); Out.In in = out.new In(); in.print(); */ } }
実行結果: 12
上記の例から、内部クラスが内部クラスであることを理解するのは難しくありません。実際、クラスは優れたコード構造を大きく損なうのですが、なぜ内部クラスを使用する必要があるのでしょうか?
内部クラスは、外部クラスのオブジェクトを生成することなく、外部クラスのメンバー変数(プライベートを含む)を自由に使用できるため、これが内部クラスの唯一の利点でもあります
心臓が血液に直接アクセスできるのと同じように、医師を通して採血する代わりに体に血液を注入します
プログラムがコンパイルされると、Out.class と Out$In.class という 2 つの .class ファイルが生成されます
ここで、$ は上記のプログラムの Out.In のファイルを表します.
Out.In in = new Out( ).new In() は、内部クラス オブジェクトを生成するために使用できます。このメソッドには、注意する必要がある 2 つの小さな知識点があります
1。最初は、生成する必要がある内部クラスのオブジェクトがどの外部クラスにあるかを示すことです。
2、内部クラスのオブジェクトを生成する前に、まず外部クラスのオブジェクトを取得する必要があります。クラスは外部クラスのメンバー変数にアクセスします
例2: 内部クラスの変数アクセスフォーム
class Out { private int age = 12; class In { private int age = 13; public void print() { int age = 14; System.out.println("局部变量:" + age); System.out.println("内部类变量:" + this.age); System.out.println("外部类变量:" + Out.this.age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out().new In(); in.print(); } }
実行結果:
ローカル変数: 14
内部クラス変数: 13
外部クラス変数: 12
例 1 から、内部クラスに同じ名前のメンバー変数とローカル変数がない場合、内部クラスは Out.this を指定せずにクラスの外部のメンバー変数に直接アクセスすることがわかります。属性名
それ以外の場合、内部クラスのローカル変数は外部クラスのメンバー変数を上書きします
そして、内部クラス自体のメンバー変数にアクセスする場合は、 this.attribute name を使用して外部クラスにアクセスすることができます メンバー変数は使用する必要がありますOut.this. 属性名
例 3: 静的内部クラス
class Out { private static int age = 12; static class In { public void print() { System.out.println(age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out.In(); in.print(); } }
実行結果: 12
static を使用して内部クラスを静的にすると、内部クラスは外部クラスの静的メンバー変数にのみアクセスできることがわかります。制限があります
第二に、内部クラスは静的であるため、Out.In を全体として見ることができ、内部クラスのオブジェクトを直接新しいものにすることができます (クラス名を介して static にアクセスしても、外部クラスのオブジェクトは生成されません)。関係ありません)
例 4: プライベート内部クラス
class Out { private int age = 12; private class In { public void print() { System.out.println(age); } } public void outPrint() { new In().print(); } } public class Demo { public static void main(String[] args) { //此方法无效 /* Out.In in = new Out().new In(); in.print(); */ Out out = new Out(); out.outPrint(); } }
実行結果: 12
内部クラスを外部クラスのメソッドによってのみ操作したい場合は、private を使用して内部クラスを宣言できます
上記のコードでは、Out クラスでは、操作のために In クラスのオブジェクトが生成されなければなりません。また、Out.In in = new Out().new In() を使用して内部のオブジェクトを生成することはできなくなります。つまり、この時点での内部クラスは、外部クラスによってのみ使用できます。
例 5: メソッド内部クラス
class Out { private int age = 12; public void Print(final int x) { class In { public void inPrint() { System.out.println(x); System.out.println(age); } } new In().inPrint(); } } public class Demo { public static void main(String[] args) { Out out = new Out(); out.Print(3); } }
実行結果:
312
この時点で外部クラスのメソッドにパラメータを渡す必要がある場合は、クラスの外部メソッドのパラメータをfinalを使用して定義する必要があります。finalについては、ここでは特別な意味はありません。上記は Java の内部クラスの概要です。詳細については、PHP Chinese Net (www.php.cn) を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです
