最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java內(nèi)部類與匿名內(nèi)部類

 更新時間:2022年06月14日 14:08:00   作者:??共飲一杯無????  
這篇文章主要介紹了Java內(nèi)部類與匿名內(nèi)部類,內(nèi)部類可以直接訪問外部類的成員,包括私有成員。外部類要訪問內(nèi)部類的成員,必須要建立內(nèi)部類的對象,更多相關(guān)內(nèi)容可以參考下面文章內(nèi)容

一、內(nèi)部類

什么是內(nèi)部類

將一個類A定義在另一個類B里面,里面的那個類A就稱為內(nèi)部類,B則稱為外部類。

成員內(nèi)部類

成員內(nèi)部類 :定義在類中方法外的類。

定義格式:

class 外部類 {
class 內(nèi)部類{
}
}

在描述事物時,若一個事物內(nèi)部還包含其他事物,就可以使用內(nèi)部類這種結(jié)構(gòu)。比如,電腦類Computer 中包含中央處理器類Cpu ,這時, Cpu 就可以使用內(nèi)部類來描述,定義在成員位置。

代碼舉例:

class Computer { //外部類
    class Cpu { //內(nèi)部類
    }
}

訪問特點

  • 內(nèi)部類可以直接訪問外部類的成員,包括私有成員。
  • 外部類要訪問內(nèi)部類的成員,必須要建立內(nèi)部類的對象。

創(chuàng)建內(nèi)部類對象格式:

外部類名.內(nèi)部類名 對象名 = new 外部類().new 內(nèi)部類();

訪問演示,代碼如下:

定義類:

public class Person {
    private boolean live = true;
    class Heart {
        public void jump() {
            // 直接訪問外部類成員
            if (live) {
                System.out.println("心臟在跳動??");
            } else {
                System.out.println("心臟不跳了??");
            }
        }
    }
    public boolean isLive() {
        return live;
    }
    public void setLive(boolean live) {
        this.live = live;
    }
}

定義測試類:

public class InnerDemo {
    public static void main(String[] args) {
        // 創(chuàng)建外部類對象
        Person p = new Person();
        // 創(chuàng)建內(nèi)部類對象
        Heart heart = p.new Heart();
        // 調(diào)用內(nèi)部類方法
        heart.jump();
        // 調(diào)用外部類方法
        p.setLive(false);
        // 調(diào)用內(nèi)部類方法
        heart.jump();
    }
}

輸出結(jié)果:

心臟在跳動??
心臟不跳了??

??內(nèi)部類仍然是一個獨立的類,在編譯之后會內(nèi)部類會被編譯成獨立的.class文件,但是前面冠以外部類的類名和$符號 。比如,Person$Heart.class

二、匿名內(nèi)部類

匿名內(nèi)部類 :是內(nèi)部類的簡化寫法。它的本質(zhì)是一個帶具體實現(xiàn)的父類或者父接口的 匿名的 子類對象。開發(fā)中,最常用到的內(nèi)部類就是匿名內(nèi)部類了。以接口舉例,當(dāng)你使用一個接口時,似乎得做如下幾步操作:

  • 定義子類
  • 重寫接口中的方法
  • 創(chuàng)建子類對象
  • 調(diào)用重寫后的方法

我們的目的,最終只是為了調(diào)用方法,那么能不能簡化一下,把以上四步合成一步呢?匿名內(nèi)部類就是做這樣的快捷方式。

前提

匿名內(nèi)部類必須繼承一個父類或者實現(xiàn)一個父接口。

格式

new 父類名或者接口名(){
// 方法重寫
@Override
public void method() {
// 執(zhí)行語句
}
};

使用方式

以接口為例,匿名內(nèi)部類的使用,代碼如下:

定義接口:

public abstract class FlyAble{
    public abstract void fly();
}

創(chuàng)建匿名內(nèi)部類,并調(diào)用:

public class InnerDemo {
    public static void main(String[] args) {
        /**
        1.等號右邊:是匿名內(nèi)部類,定義并創(chuàng)建該接口的子類對象
        2.等號左邊:是多態(tài)賦值,接口類型引用指向子類對象
        */
        FlyAble f = new FlyAble(){
            public void fly() {
                System.out.println("蕪湖,起飛??!??????");
            }
        };
        //調(diào)用 fly方法,執(zhí)行重寫后的方法
        f.fly();
    }
}

通常在方法的形式參數(shù)是接口或者抽象類時,也可以將匿名內(nèi)部類作為參數(shù)傳遞。

代碼如下:

public class InnerDemo2 {
    public static void main(String[] args) {
        /**
        1.等號右邊:是匿名內(nèi)部類,定義并創(chuàng)建該接口的子類對象
        2.等號左邊:是多態(tài)賦值,接口類型引用指向子類對象
        */
        FlyAble f = new FlyAble(){
            public void fly() {
                System.out.println("蕪湖,起飛??!??????");
            }
        };
        // 將f傳遞給showFly方法中
        showFly(f);
    }
    public static void showFly(FlyAble f) {
        f.fly();
    }
}

以上兩步,也可以簡化為一步,代碼如下:

public class InnerDemo3 {
    public static void main(String[] args) {
        /**
        創(chuàng)建匿名內(nèi)部類,直接傳遞給showFly(FlyAble f)
        */
        showFly(new FlyAble(){
            public void fly() {
                System.out.println("蕪湖,起飛?。??????");
            }
        });
    }
    public static void showFly(FlyAble f) {
        f.fly();
    }
}

執(zhí)行輸出如下:

蕪湖,起飛!!??????

到此這篇關(guān)于Java內(nèi)部類與匿名內(nèi)部類的文章就介紹到這了,更多相關(guān)Java匿名內(nèi)部類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序 開發(fā)中遇到問題總結(jié)

    微信小程序 開發(fā)中遇到問題總結(jié)

    這篇文章主要介紹了微信小程序 開發(fā)中遇到問題總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringCloud客戶端的負(fù)載均衡Ribbon的實現(xiàn)

    SpringCloud客戶端的負(fù)載均衡Ribbon的實現(xiàn)

    微服務(wù)架構(gòu),不可避免的存在單個微服務(wù)有多個實例,這篇文章主要介紹了SpringCloud客戶端的負(fù)載均衡Ribbon的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • spring boot 不連接數(shù)據(jù)庫啟動的解決

    spring boot 不連接數(shù)據(jù)庫啟動的解決

    這篇文章主要介紹了spring boot 不連接數(shù)據(jù)庫啟動的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java創(chuàng)建多級目錄文件的實例講解

    java創(chuàng)建多級目錄文件的實例講解

    下面小編就為大家分享一篇java創(chuàng)建多級目錄文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 全解史上最快的JOSN解析庫alibaba Fastjson

    全解史上最快的JOSN解析庫alibaba Fastjson

    這篇文章主要介紹了史上最快的JOSN解析庫alibaba Fastjson,對FastJson感興趣的同學(xué),一定要看一下
    2021-04-04
  • Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析

    Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析

    這篇文章主要介紹了Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析,對學(xué)習(xí)volatile關(guān)鍵字有一定的認(rèn)識,有需要的可以了解一下。
    2016-11-11
  • org.springframework.dao.OptimisticLockingFailureException樂觀鎖失敗的解決方法

    org.springframework.dao.OptimisticLockingFailureException樂觀鎖

    本文主要介紹了org.springframework.dao.OptimisticLockingFailureException樂觀鎖失敗的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Spring mvc Controller和RestFul原理解析

    Spring mvc Controller和RestFul原理解析

    這篇文章主要介紹了Spring mvc Controller和RestFul原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring Bean生命周期之Bean的實例化詳解

    Spring Bean生命周期之Bean的實例化詳解

    這篇文章主要為大家詳細(xì)介紹了Spring Bean生命周期之Bean的實例化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java設(shè)計模式之java中介者模式詳解

    Java設(shè)計模式之java中介者模式詳解

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計模式之java中介者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-09-09

最新評論

七台河市| 丹江口市| 义马市| 景谷| 神池县| 花莲县| 崇左市| 荥阳市| 噶尔县| 安吉县| 三亚市| 连云港市| 思南县| 凤阳县| 邵武市| 宜章县| 鄄城县| 监利县| 临汾市| 靖州| 清涧县| 广汉市| 韶山市| 宁夏| 平顶山市| 平远县| 朔州市| 苏尼特右旗| 昌宁县| 台州市| 岑巩县| 大悟县| 新竹县| 武鸣县| 竹北市| 通州市| 洛扎县| 山东省| 竹北市| 葫芦岛市| 北海市|