javaやC#では、インスタンス変数をnewする際に、後ろに中かっこを記述し定義を行うことができます。
ここで定義されるものは「無名クラス(匿名クラス)」と呼ばれ、クラス名を新たに定義することなく、インスタンス変数のクラス・インターフェースを継承・実装したクラスを定義することができます。
(ちなみに、「ラムダ式」と呼ばれる文法は「無名クラス」を応用したものになります)
以下、javaの例です。
【サンプルコード】
・AnonymousClass.java
1 2 3 4 5 6 7 8 9 |
public class AnonymousClass { private String STR = "Hello Class!"; public String getSTR() { return STR; } public void print() { System.out.println(getSTR()); } } |
・AnonymousInterface.java
1 2 3 |
public interface AnonymousInterface { public void print(); } |
・AnonymousMain.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class AnonymousMain { public static void main(String[] args) { // 匿名クラス作成(クラスの継承) AnonymousClass ac = new AnonymousClass(){ public void print() { System.out.println("Anonymous:" + getSTR()); } }; ac.print(); // 匿名クラス作成(インターフェースの実装) AnonymousInterface ai = new AnonymousInterface() { public void print() { System.out.println("Anonymous:Hello Interface!"); } }; ai.print(); } } |
【実行結果】
1 2 |
Anonymous:Hello Class! Anonymous:Hello Interface! |
いかがでしたでしょうか。
無名クラスは、使い捨てのクラスを作りたい時に便利です。
また、前述のラムダ式等を理解する上でも、無名クラスを理解する必要があります。
javaの入門書には出てくることが少ない文法だと思いますが、javaに慣れたらこの文法も早い内に理解することをお勧めします。