無名クラスとは?その概要と使い方

java

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!

いかがでしたでしょうか。

無名クラスは、使い捨てのクラスを作りたい時に便利です。
また、前述のラムダ式等を理解する上でも、無名クラスを理解する必要があります。

javaの入門書には出てくることが少ない文法だと思いますが、javaに慣れたらこの文法も早い内に理解することをお勧めします。

コメント

  1. マスダミユキ より:

    超初心者です、
    無名クラスについては記述がいっぱいあるのですが
    ではこれを通常のクラスで書いたらどうなるかという分かりやすい比較のサイトがなかなか見つかりません。

タイトルとURLをコピーしました