技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

無名クラスとは

javaC#では、インスタンス変数を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!