クラスは、classブロックの配下に入れ子で定義することもできます。これをネストクラスと呼びます。ネストクラスは、更に以下のように分類できます。
ネストクラス
┣staticメンバークラス
┗インナークラス(内部クラス)
┣非staticメンバークラス:メンバークラスの中でもstatic宣言されていないもの
┣匿名クラス(無名クラス):名前を持たないクラス
┗ローカルクラス:メソッド配下で宣言されたクラス
メンバークラスとは、classブロックの直下で定義されたクラスのことです。メンバークラスに対して、クラスを囲っている外側のクラスのことをエンクロージングクラスと呼びます。特定のクラスでのみ利用するクラスなどは、メンバークラスとして定義することで、関係ない他のクラスから誤って参照されてしまうことを防げます。
- class エンクロージングクラス名 {
- class メンバークラス名 {
- ...メンバークラスの実装...
- }
- ...エンクロージングクラスの実装...
- }
なお、メンバークラスを定義する際には、原則としてstatic修飾子を付与してください。というのも、非staticなメンバークラスは、インスタンス化に際してエンクロージングオブジェクトへの参照を保持するためにメモリーを消費するからです。また、この参照によってエンクロージングオブジェクトの破棄が妨げられることもあります。
非staticなメンバークラスを利用するのは、エンクロージングオブジェクトのインスタンスフィールドにアクセスしなければならない状況に限定すべきです。
関連ページ
- オブジェクト指向構文_目次
- class命令
- new演算子
- フィールドを定義する
- static final修飾子
- メソッドを定義する
- コンストラクターを定義する
- レコード
- package宣言
- import命令
- import static命令
- ネストしたクラスを定義する
- モジュール
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。