Java の匿名内部クラスは、内部クラスまたはネストされたクラスです。内部クラスは、外部クラスの内部に存在するクラスです。したがって、匿名内部クラスは名前のない内部クラスです。これは、クラスのサブクラスまたはインターフェイスの実装のいずれかです。したがって、クラスまたはインターフェイス メソッドをオーバーライドする必要がある場合は、匿名の内部クラスを使用できます。匿名内部クラスの場合、中括弧の後にセミコロンが続きます。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
匿名内部クラスを作成するには 2 つの方法があります。
構文:
以下は構文です。クラスは抽象クラス、具象クラスまたはインターフェイスのいずれかになります。
class t = new class() { // class variables and methods members public void class_method() { /* some code of the class_method */ } };
言及されている例を以下に示します:
インターフェースとそのインターフェースを実装する単純なクラスを作成する例。
コード:
package p1; interface Emp { int eid = 2101; void geteid(); } // Implclass implement an Emp Interface and provide the defination for geteid() method class ImplClass implements Emp { @Override public void geteid() { // display the eid System.out.print("Employee id is "+eid); } } class Demo { public static void main( String[] arg ) { // create object of Implclass which implements Emp interface ImplClass ob=new ImplClass(); // call geteid() method which implemented by Implclass ob.geteid(); } }
出力:
上記のコードと同様に、インターフェイス Emp は geteid() メソッドと eid=2101 を使用して作成されます。 ImplClass は Emp インターフェイスを実装し、geteid() メソッドの定義を提供します。別のクラス ImplClass を作成する必要はありません。代わりに、匿名の内部クラスとして使用できます。
ここでは、上記の Java コードを書き換えて、内部クラスが動作することを確認します。 ImplClass クラスは、アプリケーション内の他のクラスからアクセスできます。ただし、ImplClass クラスの機能は、アプリケーション内の他のクラスには必要ありません。したがって、外部クラスを定義する必要はありません。また、このクラスのインスタンスは 1 回だけ使用されます。したがって、匿名内部クラスの助けを借りて、ImplClass クラスの機能を実装できます。以下の例では、Empinterfece を実装することでクラスのオブジェクトを直接作成しました。
コード:
package p1; interface Emp { int eid = 2101; void geteid(); } class Demo { public static void main( String[] arg ) { // Implclass is hidden inner class implement an Emp Interface // Implclass class name is not created but an object is creating below Emp ob = new Emp() { @Override public void geteid() { // display the eid System.out.print("Employee id is "+eid); } }; // call geteid() method which implemented by Implclass ob.geteid(); } }
出力:
上記のコードと同様、Emp のオブジェクトは作成されません。暗黙的に、ImplClass(同じ名前でなくてもよい)クラスのオブジェクトが作成されます。内部クラスには名前がないため、コンパイラーが名前を決定して作成し、Emp インターフェースを実装することに注意してください。
クラスを拡張する匿名の内部クラスを作成する Java コード。
コード:
package p1; class Emp { void dispMesg() { System.out.println("This message is from main class"); } } class Demo { public static void main( String[] arg ) { // Anonymous hidden inner class extends an Emp class // Anonymous class name is not created but an object is creating below Emp ob = new Emp() { @Override // override dispMesg() method in child Anonymous inner class public void dispMesg() { System.out.print("This message is from child class"); } }; // call geteid() method which implemented by Implclass ob.dispMesg(); } }
出力:
抽象クラスを拡張する匿名の内部クラスを作成する Java コード。
コード:
package p1; abstract class Emp { void dispMesg() { System.out.println("This message is from main class"); } abstract void abstrct_method(); } class Demo { public static void main( String[] arg ) { // Anonymous hidden inner class extends an Emp abstract class // Anonymous class name is not created but an object is creating below Emp ob = new Emp() { @Override public void dispMesg() { System.out.println("This message is from child class"); } @Override void abstrct_method() { System.out.println("Abstract Method"); } }; ob.dispMesg(); ob.abstrct_method(); } }
出力:
内部コンストラクターまたはメソッド引数を定義する匿名の内部クラスを作成する Java コード。事前定義された Thread クラスと実行可能インターフェイスを使用してスレッドを作成および実行します。
コード:
package p1; class Demo { public static void main( String[] arg ) { // Anonymous hidden inner class extends an Emp class // Anonymous class define constructor argument Thread obt = new Thread(new Runnable() { @Override public void run() { System.out.println("Runing child Thread."); } }); System.out.println("Runing main Thread."); obt.start(); System.out.println("Runing main Thread."); } }
出力:
匿名内部クラスは、クラス名を持たない内部クラスです。匿名内部クラスを作成するには、具象クラスの拡張、抽象クラスの拡張、インターフェイスの実装など、さまざまな方法があります。
以上がJavaの匿名内部クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。