Java Gold合格への道 ~入れ子クラス~
スポンサーリンク
こんにちは。たろすです。
今回は入れ子クラスについて説明します。
入れ子クラスとは
入れ子クラスとはブロック{}内に宣言されたクラスのことを指します。
入れ子クラスにはメンバークラス、ローカルクラス、staticメンバークラスがあり、static以外の入れ子クラスのことを内部クラスと呼びます。
また、入れ子クラスは名前を付けないこともでき、そのような入れ子クラスを匿名クラスと呼びます。
それぞれ例を見ながら説明していきます。
メンバークラス
メンバークラスはクラスのメンバーとして宣言されるクラスです。
public class Outer { public class Member { public void print() { System.out.println("This is member class."); } } }
Memberがメンバークラスにあたります。
Outerクラスの外部のクラスから使用するときは以下のように使います。
public class Main { public static void main(String[] args) { Outer.Member member = new Outer().new Member(); member.print(); } }
This is member class.
インスタンスの生成の仕方が普通のクラスとは少し違います。
new 外側のクラスのコンストラクタ.new 内部クラスのコンストラクタ
というように記述します。
それに合わせて変数宣言のほうも形が少し変わっています。
外側のクラス名.内側のクラス名 変数名
ローカルクラス
ローカルクラスはメソッド内で宣言されるクラスです。
public class Outer { public void print() { class Local { public String str = "This is local class."; } Local local = new Local(); System.out.println(local.str); } }
Localクラスはprint()メソッドの中で宣言されているためローカルクラスにあたります。
Outerクラスの外部から使うときは以下のように使います。
public class Main { public static void main(String[] args) { Outer outer = new Outer(); outer.print(); } }
This is local class.
staticメンバークラス
staticメンバークラスはstaticで宣言されたメンバークラスです。
public class Outer { public class StaticMember { public void print() { System.out.println("This is static member class."); } } }
public class Main { public static void main(String[] args) { Outer.StaticMember member = new Outer().new StaticMember(); member.print(); } }
This is static member class.
staticメンバークラスはメンバークラスにstatic属性がついたこと以外は同じです。
匿名クラス
匿名クラスは名前を持たないクラスです。
主にインタフェースの実装のために使われます。
public interface Sample { void print(); }
public class Main { public static void main(String[] args) { new Sample() { public void print() { System.out.println("This is anonymous calss."); } }.print(); } }
This is anonymous calss.
普通インタフェースはあるクラスにimplementsし、そのクラスで抽象メソッドを実装します。
しかし、ここではnew Sample() {}の中で実装しています。
これが匿名クラスです。
匿名クラスとして実装することで、インタフェースをimplementsするクラスが不要になります。