匿名クラス

内部クラスの中で最も制限の厳しいクラスがこの匿名クラスです。

今までのメンバークラスやローカルクラスがクラス名を持っていたのに対し匿名クラスはクラス名を持ちません。

その宣言と同時にオブジェクトの生成を行います。

匿名クラス自身クラス名を持たないため、任意のクラスまたはインタフェースをその場で継承・実装する形で宣言します。

では、まずサンプルプログラムを見ていきます。

サンプルプログラム(Sample81.java)

class Sample81{
    public static void main(String args[]){
       
      Super81 obj = new Super81(){
       void method(){
         System.out.println("Sample81クラス");
   }
};
  
    obj.method();
} } class Super81{ void method(){ System.out.println("Super81クラスです"); } }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行します。

ここでは、Super81がスーパークラスとして宣言しています。
また、スーパークラスからmethod()メソッドをオーバーライドしています。
それは、匿名クラスはクラス名を持たないために匿名クラスのメソッドにアクセスするためには スーパークラスの参照変数が必要になるからです。
つまりクラス継承のルールに基づいてオーバーライドをしている側のメソッドが優先的に呼び出されました。
したがって、obj.method()とすることにより匿名クラスのメソッドが優先的に呼び出されます。

ちなみにもうひとつサンプルプログラムを見ていきます。

サンプルプログラム(Sample81_1.java)

class Sample81_1{
    public static void main(String args[]){
   
      Super81_1 obj = new Super81_1(){
       void method(){
        super.method();
         System.out.println("Sample81_1クラスです");
   }};
   
    obj.method();
  
    }

}
class Super81_1{

      void method(){
         System.out.println("Super81_1クラスです");
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行します。

このようにsuperを使えばスーパークラスのメソッドを呼び出すことができます。

つまり、匿名クラスはクラス名を持たないので匿名クラス自身でオブジェクトを
生成することができません。したがってこのように必ずスーパークラスのメソッドを
オーバーライドしてやる必要があるのです。

ページのトップへ戻る