この記事は、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(); } }
実行結果: 何かを食べる
ご覧のとおり、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(); } }
実行結果: 何か食べる
上記の例からわかるように、クラスが抽象またはインターフェイスである限り、そのサブクラスのメソッドは匿名の内部クラスを使用して実装できます
最も一般的に使用される状況 マルチスレッドの実装についてです。マルチスレッドを実装するには、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
以上がJava の匿名内部クラスの概要と共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。