Java 匿名内部クラスは、名前のない内部クラスであり、オブジェクトが 1 つだけ作成されます。匿名内部クラスは、実際にクラスをサブクラス化することなく、クラスまたはインターフェイスのメソッドのオーバーロードなど、特定の「追加機能」を備えたオブジェクトのインスタンスを作成する場合に便利です。
簡単に言うと、名前のないクラスは、Java では匿名内部クラスとして知られています。クラスまたはインターフェイスのメソッドをオーバーライドする必要がある場合に使用する必要があります。 Java 匿名内部クラスは、次の 2 つの方法で作成できます。
- クラス (抽象または具象の場合があります)。
- インターフェース
クラスを使用した Java 匿名内部クラスの例
TestAnonymousInner.java
abstract class Person{ abstract void eat(); } class TestAnonymousInner{ public static void main(String args[]){ Person p=new Person(){ void eat(){System.out.println('nice fruits');} }; p.eat(); } }今すぐテストしてください
出力:
nice fruits
指定されたコードの内部動作
Person p=new Person(){ void eat(){System.out.println('nice fruits');} };
- クラスが作成されますが、その名前はコンパイラによって決定されます。コンパイラは Person クラスを拡張し、eat() メソッドの実装を提供します。
- Person 型の参照変数 'p' によって参照される、Anonymous クラスのオブジェクトが作成されます。
コンパイラによって生成された内部クラス
import java.io.PrintStream; static class TestAnonymousInner$1 extends Person { TestAnonymousInner$1(){} void eat() { System.out.println('nice fruits'); } }
インターフェイスを使用した Java 匿名内部クラスの例
interface Eatable{ void eat(); } class TestAnnonymousInner1{ public static void main(String args[]){ Eatable e=new Eatable(){ public void eat(){System.out.println('nice fruits');} }; e.eat(); } }今すぐテストしてください
出力:
nice fruits
指定されたコードの内部動作
このコードの背後で 2 つの主要なタスクを実行します。
Eatable p=new Eatable(){ void eat(){System.out.println('nice fruits');} };
- クラスが作成されますが、その名前は、Eatable インターフェースを実装し、eat() メソッドの実装を提供するコンパイラーによって決定されます。
- Eatable 型の参照変数 'p' によって参照される Anonymous クラスのオブジェクトが作成されます。
コンパイラによって生成された内部クラス
import java.io.PrintStream; static class TestAnonymousInner1$1 implements Eatable { TestAnonymousInner1$1(){} void eat(){System.out.println('nice fruits');} }