首頁 > Java > java教程 > 主體

Java中的匿名內部類別

WBOY
發布: 2024-08-30 15:58:22
原創
474 人瀏覽過

Java中的匿名內部類別是內部類別或巢狀類別。內部類別是存在於外部類別內部的類別。所以匿名內部類別就是沒有名字的內部類別。它要么是類別的子類,要么是介面的實作。因此,如果我們必須重寫一個類別或介面方法,我們可以使用匿名內部類別。對於匿名內部類,大括號後面跟著分號。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

建立匿名內部類別有兩種方法。

  • 班級
  • 介面

文法:

以下是語法,其中類別可以是抽象類別或具體類別或介面。

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中的匿名內部類別

如上面的程式碼,使用 geteid() 方法建立了一個介面 Emp,並且 eid=2101。 ImplClass 實作 Emp 介面並提供 geteid() 方法的定義。不需要單獨寫一個類別ImplClass;相反,它可以用作匿名內部類別。

範例#2

這裡我們重寫上面的 java 程式碼來查看內部類別的工作情況。應用程式中的其他類別可以存取 ImplClass 類別。但是,應用程式中的其他類別不需要 ImplClass 類別的功能。因此我們不需要定義外部類別。此外,此類別的實例僅使用一次。因此,借助匿名內部類別,可以實現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中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板