欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、內(nèi)部類

什么是內(nèi)部類

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

成員內(nèi)部類

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

定義格式:

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

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

代碼舉例:

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

訪問特點(diǎn)

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

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

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

訪問演示,代碼如下:

定義類:

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

定義測(cè)試類:

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

輸出結(jié)果:

心臟在跳動(dòng)??
心臟不跳了??

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

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

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

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

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

前提

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

格式

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

使用方式

以接口為例,匿名內(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.等號(hào)右邊:是匿名內(nèi)部類,定義并創(chuàng)建該接口的子類對(duì)象
        2.等號(hào)左邊:是多態(tài)賦值,接口類型引用指向子類對(duì)象
        */
        FlyAble f = new FlyAble(){
            public void fly() {
                System.out.println("蕪湖,起飛??!??????");
            }
        };
        //調(diào)用 fly方法,執(zhí)行重寫后的方法
        f.fly();
    }
}

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

代碼如下:

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

以上兩步,也可以簡(jiǎn)化為一步,代碼如下:

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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • @Transactional跟@DS動(dòng)態(tài)數(shù)據(jù)源注解沖突的解決

    @Transactional跟@DS動(dòng)態(tài)數(shù)據(jù)源注解沖突的解決

    這篇文章主要介紹了@Transactional跟@DS動(dòng)態(tài)數(shù)據(jù)源注解沖突的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 關(guān)于mybatis3中幾個(gè)@Provider的使用方式

    關(guān)于mybatis3中幾個(gè)@Provider的使用方式

    這篇文章主要介紹了關(guān)于mybatis3中幾個(gè)@Provider的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 詳解java中接口與抽象類的區(qū)別

    詳解java中接口與抽象類的區(qū)別

    這篇文章主要介紹了詳解java中接口與抽象類的區(qū)別的相關(guān)資料,希望通過本文能幫助到大家,讓大家輕松理解掌握接口與抽象類的區(qū)別,需要的朋友可以參考下
    2017-10-10
  • MyBatis在注解上使用動(dòng)態(tài)SQL方式(@select使用if)

    MyBatis在注解上使用動(dòng)態(tài)SQL方式(@select使用if)

    這篇文章主要介紹了MyBatis在注解上使用動(dòng)態(tài)SQL方式(@select使用if),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot 異步線程間數(shù)據(jù)傳遞的實(shí)現(xiàn)

    SpringBoot 異步線程間數(shù)據(jù)傳遞的實(shí)現(xiàn)

    本文主要介紹了SpringBoot 異步線程間數(shù)據(jù)傳遞的實(shí)現(xiàn),包括異步線程的基本概念、數(shù)據(jù)傳遞的方式、具體實(shí)現(xiàn)方式等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Java 內(nèi)部類的定義與范例

    Java 內(nèi)部類的定義與范例

    說起內(nèi)部類這個(gè)詞,想必很多人都不陌生,但是又會(huì)覺得不熟悉。原因是平時(shí)編寫代碼時(shí)可能用到的場(chǎng)景不多,用得最多的是在有事件監(jiān)聽的情況下,并且即使用到也很少去總結(jié)內(nèi)部類的用法。今天我們就來一探究竟
    2021-11-11
  • java定長(zhǎng)隊(duì)列的實(shí)現(xiàn)示例

    java定長(zhǎng)隊(duì)列的實(shí)現(xiàn)示例

    定長(zhǎng)隊(duì)列是一種有限容量的隊(duì)列,對(duì)于某些應(yīng)用場(chǎng)景非常有用,本文主要介紹了java定長(zhǎng)隊(duì)列的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot 簽到獎(jiǎng)勵(lì)實(shí)現(xiàn)方案的示例代碼

    SpringBoot 簽到獎(jiǎng)勵(lì)實(shí)現(xiàn)方案的示例代碼

    這篇文章主要介紹了SpringBoot 簽到獎(jiǎng)勵(lì)實(shí)現(xiàn)方案的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • spring aop的簡(jiǎn)單使用方法詳解

    spring aop的簡(jiǎn)單使用方法詳解

    這篇文章主要介紹了spring aop的簡(jiǎn)單使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java IO創(chuàng)建目錄和文件實(shí)例代碼

    Java IO創(chuàng)建目錄和文件實(shí)例代碼

    本篇文章給大家分享了Java IO創(chuàng)建目錄和文件的實(shí)例代碼,過程很簡(jiǎn)單,大家可以測(cè)試參考下。
    2018-02-02

最新評(píng)論