javaの匿名内部クラスのまとめ


javaの匿名内部クラスのまとめ
匿名の部類、つまり名前のない部類です。
名前がないからこそ、匿名の内部クラスは一回しか使えません。コードの作成を簡略化するためによく使われます。
しかし、匿名の内部クラスを使用するには、父親のクラスを引き継ぐ必要があります。またはインターフェースを実現する必要があります。
実例1:匿名の内部クラスを使用せずに抽象的な方法を実現する

abstract class Person { 
  public abstract void eat(); 
} 
  
class Child extends Person { 
  public void eat() { 
    System.out.println("eat something"); 
  } 
} 
  
public class Demo { 
  public static void main(String[] args) { 
    Person p = new Child(); 
    p.eat(); 
  } 
} 

運転結果:eat something
私たちはChildでPersonクラスを継承し、Childの一例を実現し、それをPersonクラスの引用に変換することができる。
しかし、ここのChild類は一回しか使わないと、独立したカテゴリーにするのは面倒ではないですか?
この時は匿名の部類が導入されました。
実例2:匿名内部クラスの基本的な実現

 public abstract void eat(); 
} 
  
public class Demo { 
  public static void main(String[] args) { 
    Person p = new Person() { 
      public void eat() { 
        System.out.println("eat something"); 
      } 
    }; 
    p.eat(); 
  } 
}
運転結果:eat something
抽象的なPersonの中の方法を直接大括弧で実現したことが見られます。
これにより、一つの種類の表記を省略することができます。
また、匿名の内部クラスは、インターフェース上で使用されてもよい。
 例3:匿名の内部クラスをインターフェース上で使用する

interface Person { 
  public void eat(); 
} 
  
public class Demo { 
  public static void main(String[] args) { 
    Person p = new Person() { 
      public void eat() { 
        System.out.println("eat something"); 
      } 
    }; 
    p.eat(); 
  } 
}
運転結果:eat something
上記の例から分かるように、1つのクラスが抽象的または1つのインターフェースである限り、そのサブクラスの方法は匿名の内部クラスを使用して実現されてもよい。
多くのスレッドを実現するためには、Threadクラスを継承したり、Runnableインターフェースを継承したりする必要があります。
 実例4:Thread類の匿名内部クラスの実現

public class Demo { 
  public static void main(String[] args) { 
    Thread t = new Thread() { 
      public void run() { 
        for (int i = 1; i <= 5; i++) { 
          System.out.print(i + " "); 
        } 
      } 
    }; 
    t.start(); 
  } 
}
運転結果:1 2 3 4 5
 実例5:Runnableインターフェースの匿名内部クラス実装

public class Demo { 
  public static void main(String[] args) { 
    Runnable r = new Runnable() { 
      public void run() { 
        for (int i = 1; i <= 5; i++) { 
          System.out.print(i + " "); 
        } 
      } 
    }; 
    Thread t = new Thread(r); 
    t.start(); 
  } 
}
運転結果:1 2 3 4 5
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。