Javaの匿名内部クラス

WBOY
WBOYオリジナル
2024-08-30 15:58:22495ブラウズ

Java の匿名内部クラスは、内部クラスまたはネストされたクラスです。内部クラスは、外部クラスの内部に存在するクラスです。したがって、匿名内部クラスは名前のない内部クラスです。これは、クラスのサブクラスまたはインターフェイスの実装のいずれかです。したがって、クラスまたはインターフェイス メソッドをオーバーライドする必要がある場合は、匿名の内部クラスを使用できます。匿名内部クラスの場合、中括弧の後にセミコロンが続きます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

匿名内部クラスを作成するには 2 つの方法があります。

  • クラス
  • インターフェース

構文:

以下は構文です。クラスは抽象クラス、具象クラスまたはインターフェイスのいずれかになります。

class t = new class()
{
// class variables and methods members
public void class_method()
{
/* some code of the class_method */
}
};

Java の匿名内部クラスの例

言及されている例を以下に示します:

例 #1

インターフェースとそのインターフェースを実装する単純なクラスを作成する例。

コード:

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();      
    } 
} 

出力:

Javaの匿名内部クラス

上記のコードと同様に、インターフェイス Emp は geteid() メソッドと eid=2101 を使用して作成されます。 ImplClass は Emp インターフェイスを実装し、geteid() メソッドの定義を提供します。別のクラス ImplClass を作成する必要はありません。代わりに、匿名の内部クラスとして使用できます。

例 #2

ここでは、上記の 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();      
    } 
}

出力:

Javaの匿名内部クラス

上記のコードと同様、Emp のオブジェクトは作成されません。暗黙的に、ImplClass(同じ名前でなくてもよい)クラスのオブジェクトが作成されます。内部クラスには名前がないため、コンパイラーが名前を決定して作成し、Emp インターフェースを実装することに注意してください。

例 #3

クラスを拡張する匿名の内部クラスを作成する 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の匿名内部クラス

例 #4

抽象クラスを拡張する匿名の内部クラスを作成する 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の匿名内部クラス

例 #5

内部コンストラクターまたはメソッド引数を定義する匿名の内部クラスを作成する 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の匿名内部クラス

結論

匿名内部クラスは、クラス名を持たない内部クラスです。匿名内部クラスを作成するには、具象クラスの拡張、抽象クラスの拡張、インターフェイスの実装など、さまざまな方法があります。

以上がJavaの匿名内部クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Java述語次の記事:Java述語