全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Java培訓(xùn):匿名內(nèi)部類(lèi)的用法

更新時(shí)間:2022-07-19 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  匿名內(nèi)部類(lèi)是沒(méi)有名稱(chēng)的內(nèi)部類(lèi)。在Java中調(diào)用某個(gè)方法時(shí),如果該方法的參數(shù)是接口類(lèi)型,除了可以傳入一個(gè)接口實(shí)現(xiàn)類(lèi)外,還可以使用實(shí)現(xiàn)接口的匿名內(nèi)部類(lèi)作為參數(shù),在匿名內(nèi)部類(lèi)中直接完成方法的實(shí)現(xiàn)。

  創(chuàng)建匿名內(nèi)部類(lèi)的基本語(yǔ)法格式如下:

new 父接口 (){
   //匿名內(nèi)部類(lèi)實(shí)現(xiàn)部分
}

  下面通過(guò)一個(gè)案例學(xué)習(xí)匿名內(nèi)部類(lèi)的定義和使用,如文件4-23所示。

  文件4-23 Example23.java

interface Animal {
    void shout ();
}
public class Example23{
    public static void main (String[] args) {
        String name = "小花";
        animalShout (new Animal () {
          @Override
          public void shout () {
              System.out.println (name+"喵喵......");
          }
        });
    }
    public static void animalShout (Animal an) {
        an.shout ();
    }
}

  文件4-23的運(yùn)行結(jié)果如圖4-23所示。

1658211807341_匿名內(nèi)部類(lèi)示例運(yùn)行結(jié)果.jpg

  圖4-23 文件4-23的運(yùn)行結(jié)果

  文件4-23中,第1~3行代碼創(chuàng)建了Animal接口;第7~12行代碼是調(diào)用animalShout()方法,將實(shí)現(xiàn)Animal接口的匿名內(nèi)部類(lèi)作為animalShout()方法的參數(shù),并在匿名內(nèi)部類(lèi)中重寫(xiě)了Animal接口的shout()方法。

  需要注意的是,在文件4-23中的匿名內(nèi)部類(lèi)中訪(fǎng)問(wèn)了局部變量name,而局部變量name并沒(méi)有使用final修飾符修飾,程序也沒(méi)有報(bào)錯(cuò)。這是JDK8的新增特性,允許在局部?jī)?nèi)部類(lèi)、匿名內(nèi)部類(lèi)中訪(fǎng)問(wèn)非final修飾的局部變量,而在JDK8之前,局部變量前必須加final修飾符,否則程序編譯時(shí)報(bào)錯(cuò)。

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!