Java 速習チュートリアル

Java 匿名クラス (Anonymous Class)

1. 匿名クラスとは?

匿名クラス(Anonymous Class)とは、名前を持たないクラスのことです。これはクラスの定義とオブジェクト(Object)の作成を同時に行うために使用されます。

通常、匿名クラスは、別のクラスファイルを個別に作成することなく、既存のクラスのメソッド(Method)をオーバーライド(Override)したり、インターフェースをその場で実装したりするために利用されます。

以下は、別のクラスを継承(Inherit)し、そのメソッドをオーバーライドする匿名クラスの作成例です。

// 通常のクラス
class Animal {
  public void makeSound() {
    System.out.println("動物が音を出します");
  }
}

public class Main {
  public static void main(String[] args) {
    // makeSound() をオーバーライドする匿名クラス
    Animal myAnimal = new Animal() {
      public void makeSound() {
        System.out.println("ワンワン(Woof woof)");
      }
    }; // オブジェクトを作成するコード行を終了させるためにセミコロンが必要です

    myAnimal.makeSound();
  }
}

出力結果:

ワンワン(Woof woof)

2. インターフェースからの匿名クラス作成

匿名クラスを使用して、インターフェース(Interface)を即座に実装することも可能です。

// インターフェース
interface Greeting {
  void sayHello();
}

public class Main {
  public static void main(String[] args) {
    // Greetingインターフェースを実装する匿名クラス
    Greeting greet = new Greeting() {
      public void sayHello() {
        System.out.println("こんにちは、世界!(Hello, World!)");
      }
    };

    greet.sayHello();
  }
}

出力結果:

こんにちは、世界!(Hello, World!)

3. 匿名クラスはいつ使うべきか?

匿名クラスは、一度しか使用しない短いクラスが必要な場合に適しています。具体的なユースケース(Use case)は以下の通りです:

  • 新しいサブクラスを作成することなく、特定のメソッドのみをオーバーライドしたい場合
  • インターフェースを迅速に実装したい場合
  • 小さな動作の断片をオブジェクトとして渡したい場合