内部クラス
隠しコードとアクセス制御機構を反映して、クラスのクラスで定義され、内部クラスと外部クラスは、特定の関係を持って、多くの場合、唯一の外部クラスは、この内部クラスを呼び出すので、内部クラスを格納するために特別なJavaファイルを使用する必要はありません。
- 内部クラスは private キーワードによって変更されます。これは、内部クラスがその外部クラスからのみ見えることを意味します。
- 内部クラスがpublicキーワードによって変更された場合、他の外部クラスで使用することができますが、内部クラスのオブジェクトはその外部クラスによってインスタンス化されなければなりません。
- 内部クラスには外部クラスへの thisポインタが含まれ、外部クラスのすべてのプロパティとメソッド(プライベート・プロパティとメソッドを含む)にアクセスできます。
- 同様に、外側クラスは内側クラスのすべての要素にアクセスできます。
分類
- メンバー内部クラス:
- クラスがインスタンス・メンバとして他のクラスの内部で定義されている場合、そのようなクラスはメンバ内部クラスと呼ばれます。
- 外部クラスのどのメンバも、メンバ内部クラスの内部から無条件にアクセスできます。
- 外部クラスのメンバ内部クラスのメンバにアクセスするには、直接ではなく、内部クラスのオブジェクトを経由する必要があります。
- 非表示は、内部クラスが外部クラスと同じメンバやメソッドを持っている場合に発生します。デフォルトでは、内部クラスのメンバやメソッドにアクセスされ、同じ名前の外部クラスのメンバにアクセスしたい場合は、外部クラスを通して表示する必要があります。this.メンバ変数
- ローカル内部クラス:
- ローカル内部クラスは、メソッドまたはスコープの内部で定義されるクラスで、ローカル内部クラスへのアクセスがメソッドまたはスコープに限定される点でメンバー内部クラスとは異なります。ローカル内部クラスは、ローカル変数と同様に、アクセス修飾子を持つことができず、そのスコープの外にアクセスすることはできません。
- 匿名内部クラス:
- 匿名内部クラスは、親クラス名とサブクラスのボディを追加することで作成されます。
- 匿名内部クラスはコンストラクタ・メソッドを持たず、ほとんどの匿名内部クラスはインターフェースのコールバックに使用されます。
- 静的内部クラス:
- 静的な内部クラスもまた、別のクラスの内部で定義されたクラスですが、static キーワードによって変更されます。
- 静的内部クラスは外部クラスに依存せず、外部クラス this のオブジェクトへの参照を保持しません。を使用することはできません。
- 静的な内部クラス・オブジェクトは、外部クラス・オブジェクトから作成する必要なく作成されます。
- クラスの静的メンバとして、外部クラスのインスタンス・メンバではなく、外部クラスの静的メンバにのみアクセスできます。
- 静的な内部クラス・メンバは、外部クラスから直接アクセスすることはできず、内部クラス・オブジェクトを介してアクセスする必要があります。
- 外部クラスが静的な内部クラスの静的メンバにアクセスする場合は、クラス名を使用してアクセスできるため、静的な内部クラス・オブジェクトを作成する必要はありません。
内部クラスを使用する理由
内部クラスは通常、その外部クラスによってのみ使用されます。内部クラスは外部クラスへのある種の窓を提供し、外部クラスがクラスを継承しているかどうかに関係なく、各内部クラスはクラスから独立して継承することができます。したがって、内部クラスは多重継承の完全な解決策となります。
内部クラスと静的内部クラスの違い:
- 静的な内部クラスは静的なメンバを持つことができますが、非静的な内部クラスは静的なメンバを持つことができません。
- 静的な内部クラスは外部クラスの静的なメンバにのみアクセスでき、非静的な内部クラスは外部クラスのすべてのメンバにアクセスできます。
- 非静的な内部クラスのメソッドをインスタンス化します:
- まず、外部クラス・オブジェクトのインスタンスを生成します OutClassTest oc1 = new OutClassTest();
- 静的な内部クラスのメソッドをインスタンス化します: