JAVAの匿名クラス

2016年04月09日

1、匿名クラスとは

匿名クラスとは、クラス名を指定せずに、クラス定義とインスタンス化を一つの式として記述したクラスのことです。匿名クラスは、あるクラスのサブクラスまたは、あるインターフェースを実装したクラスになります。「new スーパークラス」または「new インターフェース」の後にオーバーライドする処理をブロックとして記述します。また匿名クラスは1つの式として定義するため、最後に;(セミコロン)が必要です。

2、匿名クラスの書式

class Outer {
  void method() {
    new スーパークラス名またはインターフェース名(){
       .
       .
       .
    }
  }
}

3、匿名クラスのルール

匿名クラスには以下のようなルールがあります。

匿名クラス ・アクセス修飾子(public,protected,private)を使用できない
・static修飾子を使用できない
・abstract修飾子、final修飾子を使用できない
・外側のクラスのメンバーにアクセスできる
・外側のクラスのメソッドの引数及びローカル変数のうち、final指定されたものにアクセスできる
・コンストラクタを定義できない

4、サンプルコード

interface MyInterface { void methodA(); }
class Outer {
  void method() {
    new MyInterface() {
      public void methodA() {
        System.out.println("methodA()");
      }
    }.methodA();
  }
}
class Sample {
  public static void main(String[] args) {
    new Outer().method();
  }
}

実行結果は

methodA()

なお、匿名クラスの定義及びメソッドの呼び出しは次のように記述でも可能です。

interface MyInterface { void methodA(); }
class Outer {
  void method() {
    MyInterface obj = new MyInterface() {
      public void methodA() {
        System.out.println("methodA()");
      }
    };
    obj.methodA();
  }
}
class Sample3_8 {
  public static void main(String[] args) {
    new Outer().method();
  }
}

実行結果は

methodA()