logo

Java匿名内部クラス

Java 匿名内部クラスは、名前のない内部クラスであり、オブジェクトが 1 つだけ作成されます。匿名内部クラスは、実際にクラスをサブクラス化することなく、クラスまたはインターフェイスのメソッドのオーバーロードなど、特定の「追加機能」を備えたオブジェクトのインスタンスを作成する場合に便利です。

簡単に言うと、名前のないクラスは、Java では匿名内部クラスとして知られています。クラスまたはインターフェイスのメソッドをオーバーライドする必要がある場合に使用する必要があります。 Java 匿名内部クラスは、次の 2 つの方法で作成できます。

  1. クラス (抽象または具象の場合があります)。
  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');} }; 
  1. クラスが作成されますが、その名前はコンパイラによって決定されます。コンパイラは Person クラスを拡張し、eat() メソッドの実装を提供します。
  2. 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');} }; 
  1. クラスが作成されますが、その名前は、Eatable インターフェースを実装し、eat() メソッドの実装を提供するコンパイラーによって決定されます。
  2. Eatable 型の参照変数 'p' によって参照される Anonymous クラスのオブジェクトが作成されます。

コンパイラによって生成された内部クラス

 import java.io.PrintStream; static class TestAnonymousInner1$1 implements Eatable { TestAnonymousInner1$1(){} void eat(){System.out.println('nice fruits');} }