日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

匿名内部类探究——它是一个实例

發布時間:2025/3/11 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匿名内部类探究——它是一个实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

    • 我的學習過程
    • 匿名內部類概述
    • 匿名內部類探究
    • 代碼驗證(匿名內部類是一個實例)
    • 結論

我的學習過程

昨天想學習一下Java8新特性,看到Lambda表達式可以替代匿名內部類。我對匿名內部類不太理解,決定學習一下。并進行了下面的歸納和思考。

匿名內部類概述

繼承式匿名內部類聲明格式:

new 類名(){};

接口式匿名內部類聲明格式:

new 接口名(){ //接口中方法要重寫(@Override可省略,不需要重寫接口的全部方法) ... };

匿名內部類有什么特點呢?

  • 匿名內部類沒有類名,它也就不能定義出構造器,所以它沒有自己的構造器。
  • 匿名內部類是隱式地繼承了一個特定的類,或者隱式地實現了一個特定的接口。
  • 匿名內部類無法定義靜態成員和靜態方法。
  • 匿名內部類不能用public,protected,private,static修飾。
  • 匿名內部類只能創建一個實例。
  • 匿名內部類探究

    匿名內部類是一個實例嗎?
    答:繼承式匿名內部類是一個實例,接口式匿名內部類不是一個實例。有待考證*1
    我的思考:
    隱名內部類由于沒有類名,就沒有自己的構造器。

    對于繼承式匿名內部類來說,匿名內部類是某個特定類的子類,使用new時候,相當于通過父類構造器實例化了一個實例。

    對于接口式匿名內部類來說,匿名內部類是實現了某個特定的接口,使用new的時候,相當于實現了特定接口,不是實例化。
    有待考證*1
    另外想法:接口式匿名內部類是一個類,使用new時,就是相當于實例化了一個對象,只是對象內部實現了特定接口,所以是一個實例。傾向于認為:接口式匿名內部類也是一個實例。

    進一步考證*1
    接口式匿名內部類是一個實例。

    代碼驗證(匿名內部類是一個實例)

    代碼文件包含(同一個包下):類:Car.java、接口:CarFun.java、main函數驗證:Test.java

    類:Car.java

    上圖說明:這是一個叫Car的類,它實現了CarFun接口,對接口中的drive()和stop()方法進行了重寫。

    接口:CarFun.java

    上圖說明:這個是叫CarFun的接口,它有drive()和stop()兩個方法。

    main函數驗證:Test.java

    ==進一步待考證*1:==匿名內部類可以傳參數嗎?我這里示例傳了參數height的值175,所以它還是匿名內部類嗎?

    進一步考證*1
    去掉height參數。代碼如下:
    通過第8行的zerocar.getHeight()語句打印,執行結果得到

    Height: 0

    說明:不傳參數時候,zerocar是一個實例對象,匿名內部類是一個實例。
    思考:所以有參數情況下還是一個匿名內部類嗎?
    暫時不知道。有待進一步考證*2

    這部分在main函數下寫了繼承式匿名內部類。它是一個Car的子類,通過Car的有參構造器實例化了一個實例zerocar。

    //Car的有參構造器 public Car(int height, int weight) {this.height = height;}

    且通過第7行的zerocar.getHeight()語句打印,執行結果得到

    Height: 175

    進一步印證了zerocar是個實例對象。

    (續上一張圖片)

    這部分在main函數下寫了接口式匿名內部類。我選擇把接口CarFun里的兩個方法都進行了重寫(不一定要全部方法重寫,因為此處可以省略@Override)。并用zerocarfun調用了drive()和stop()方法。執行結果:

    zero開車了,已經開了0.2600633412878144千米 zero停車了

    執行成功,說明zerocarfun可以調用方法,說明它是一個對象。所以接口式匿名內部類也是一個實例。

    同時驗證了:
    繼承式匿名內部類是通過父類構造器實例化,可以是有參構造器,也可以是無參構造器。

    同時發現:
    繼承式匿名內部類的花括號內寫不了打印語句,因為我寫的打印語句println報紅,末尾分號顏色變灰色。

    【報錯1】:Cannot resolve symbol ‘println’
    【報錯2】:Unnecessary semicolon ‘;’
    Inspection info: Reports on any unnecessary semicolons, whether between class members, inside block statements, or after class definitions. While valid Java, these semicolons are redundant, and may be removed.
    這個和百度百科中Java內部類-繼承式匿名內部類的寫法有出入。為什么我這邊不能用打印語句呢?
    百度一下。沒百度到原因。有說缺少main函數導致。可是我的代碼并不缺少main函數。難道是繼承式匿名內部類開辟了另外一個區域,獨立于main函數了嗎?有待考證*2

    結論

    匿名內部類它是一個實例。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的匿名内部类探究——它是一个实例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。