javaやC#では、インスタンス変数をnewする際に、後ろに中かっこを記述し定義を行うことができます。
ここで定義されるものは「無名クラス(匿名クラス)」と呼ばれ、クラス名を新たに定義することなく、インスタンス変数のクラス・インターフェースを継承・実装したクラスを定義することができます。
(ちなみに、「ラムダ式」と呼ばれる文法は「無名クラス」を応用したものになります)
以下、javaの例です。
【サンプルコード】
・AnonymousClass.java
public class AnonymousClass {
private String STR = "Hello Class!";
public String getSTR() {
return STR;
}
public void print() {
System.out.println(getSTR());
}
}
・AnonymousInterface.java
public interface AnonymousInterface {
public void print();
}
・AnonymousMain.java
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();
}
}
【実行結果】
Anonymous:Hello Class!
Anonymous:Hello Interface!