内部クラスは、その定義方法に応じて、静的内部クラス、メンバー内部クラス、ローカル内部クラス、匿名内部クラスの 4 つのタイプに分類されます。
1. 静的内部クラス
クラス内で定義された静的クラスは、静的内部クラスです。
public class Out { private static int a; private int b; public static class Inner { public void print() { System.out.println(a); } } }
1) 静的内部クラスは、プライベートなものも含め、外部クラスのすべての静的変数とメソッドにアクセスできます。
(推奨ビデオ: java ビデオ チュートリアル)
2) 静的内部クラスと一般に、クラスは一貫性があり、静的変数、メソッド、コンストラクターなどを定義できます。
3) 静的内部クラスを使用する他のクラスは、「外部クラス.静的内部クラス」メソッドを使用する必要があります。以下に示すように: Out.Inner inner = new Out.Inner(); inner.print();
4) Java コレクション クラス HashMap 内には静的内部クラス Entry があります。 Entry は HashMap が要素を格納するための抽象化です。HashMap は要素を格納するために内部的に Entry 配列を維持しますが、Entry はユーザーに対して透過的です。静的内部クラスは、外部クラスと密接に関連しており、外部クラスのインスタンスに依存しない場合に使用できます。
2. メンバ内部クラス
クラス内に定義された非静的クラスはメンバ内部クラスです。メンバーの内部クラスでは、静的メソッドと変数 (final によって変更されたものを除く) を定義できません。これは、メンバー内部クラスが非静的であるためです。クラスが初期化されるとき、静的メンバーが最初に初期化されます。メンバー内部クラスが静的変数を定義できる場合は、メンバー内部クラスの静的変数の初期化順序が決まります。曖昧です。
public class Out { private static int a; private int b; public class Inner { public void print() { System.out.println(a); System.out.println(b); } } }
3. ローカル内部クラス(メソッド内で定義されたクラス)
メソッド内で定義されたクラスはローカルクラスです。クラスが特定のメソッド内でのみ使用される場合は、ローカル クラスの使用を検討してください。
public class Out { private static int a; private int b; public void test(final int c) { final int d = 1; class Inner { public void print() { System.out.println(c); } } } }
4. 匿名内部クラス (親クラスを継承するかインターフェイスを実装するには、new を直接使用してオブジェクトへの参照を生成します)
Anonymous内部クラス クラスの場合、親クラスを継承するか、インターフェイスを実装する必要がありますが、当然ながら、親クラスを継承したり、インターフェイスを実装したりできるのは 1 つだけです。同時に、匿名内部クラスは new を直接使用してオブジェクトへの参照を生成するため、class キーワードがありません。
1) 匿名内部クラスは一度しか使用できません。匿名内部クラスを作成すると、すぐにクラスのインスタンスが作成されます。クラスの定義はすぐに消えるため、匿名内部クラスは使用できません。繰り返し使用中です。
2) 匿名内部クラスはコンストラクターを定義できず、静的メンバー変数や静的メソッドを持つこともできません。
3) 匿名内部クラスのメソッドは抽象メソッドにすることはできません。インターフェイスを実装するか、親クラスのすべての抽象メソッドを継承する必要があります。
4) 匿名内部クラスがアクセスする外部クラスのメンバ変数またはメンバ メソッドは、static で変更する必要があります。内部クラスは、外部クラスのプライベート変数およびメソッドにアクセスできます。
public abstract class Bird { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract int fly(); } public class Test { public void test(Bird bird){ System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米"); } public static void main(String[] args) { Test test = new Test(); test.test(new Bird() { public int fly() { return 10000; } public String getName() { return "大雁"; } }); } }
この記事は、php 中国語 Web サイトの java チュートリアル コラムから引用したものです。学習へようこそ!
以上がJava 内部クラスを 10 分で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。