Java中的匿名內部類別是內部類別或巢狀類別。內部類別是存在於外部類別內部的類別。所以匿名內部類別就是沒有名字的內部類別。它要么是類別的子類,要么是介面的實作。因此,如果我們必須重寫一個類別或介面方法,我們可以使用匿名內部類別。對於匿名內部類,大括號後面跟著分號。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
建立匿名內部類別有兩種方法。
文法:
以下是語法,其中類別可以是抽象類別或具體類別或介面。
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(); } }
輸出:
如上面的程式碼,使用 geteid() 方法建立了一個介面 Emp,並且 eid=2101。 ImplClass 實作 Emp 介面並提供 geteid() 方法的定義。不需要單獨寫一個類別ImplClass;相反,它可以用作匿名內部類別。
這裡我們重寫上面的 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(); } }
輸出:
如上面的程式碼,並沒有建立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中文網其他相關文章!