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

Java面向?qū)ο笾畠?nèi)部類案例講解

 更新時(shí)間:2021年08月05日 09:11:11   作者:Z && Y  
這篇文章主要介紹了Java面向?qū)ο笾畠?nèi)部類案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

1. 內(nèi)部類

很多時(shí)候我們創(chuàng)建類的對(duì)象的時(shí)候并不需要使用很多次,每次只使用一次,這個(gè)時(shí)候我們就可以使用內(nèi)部類了

1.1 內(nèi)部類概述

  • 內(nèi)部類就是在一個(gè)類的內(nèi)部在定義一個(gè)類,比如,A類中定義一個(gè)B類,那么B類相對(duì)A類來(lái)說(shuō)就稱為內(nèi)部類,而A類相對(duì)B類來(lái)說(shuō)就是外部類了。
  • 內(nèi)部類不是在一個(gè)java源文件中編寫倆個(gè)平行的倆個(gè)類,而是在一個(gè)類的內(nèi)部再定義另外一個(gè)類。 我可以把外邊的類稱為外部類,在其內(nèi)部編寫的類稱為內(nèi)部類。
  • 內(nèi)部類分為四種:
    • 成員內(nèi)部類
    • 靜態(tài)內(nèi)部類
    • 局部?jī)?nèi)部類
    • 匿名內(nèi)部類

1.2 成員內(nèi)部類(實(shí)例內(nèi)部類、非靜態(tài)內(nèi)部類)

注:成員內(nèi)部類中不能寫靜態(tài)屬性和方法


1.2.1 【定義一個(gè)內(nèi)部類】

//在A類中申明了一個(gè)B類,此B類就在A的內(nèi)部,并且在成員變量的位置上,所以就稱為成員內(nèi)部類
public class Outer {
    private int id;

    class Inner {
        public void in() {
            System.out.println("這是內(nèi)部類方法");
        }
    }

    public void out() {
        System.out.println("這是外部類方法");
    }
}

1.2.2【實(shí)例化內(nèi)部類】

實(shí)例化內(nèi)部類,首先需要實(shí)例化外部類,通過(guò)外部類去調(diào)用內(nèi)部類

// 代碼接上
class Test {
    public static void main(String[] args) {
        //實(shí)例化成員內(nèi)部類分兩步
        //1、實(shí)例化外部類
        Outer outObject = new Outer();
        //2、通過(guò)外部類調(diào)用內(nèi)部類
        Outer.Inner inObject = outObject.new Inner();
        //測(cè)試,調(diào)用內(nèi)部類中的方法
        inObject.in();//打印:這是內(nèi)部類方法
    }
}

在這里插入圖片描述

分析:
想想如果你要使用一個(gè)類中方法或者屬性,你就必須要先有該類的一個(gè)對(duì)象,同理,一個(gè)類在另一個(gè)類的內(nèi)部,那么想要使用這個(gè)內(nèi)部類,就必須先要有外部類的一個(gè)實(shí)例對(duì)象,然后在通過(guò)該對(duì)象去使用內(nèi)部類。


1.2.3 【成員內(nèi)部類能干什么?】

訪問(wèn)外部類的所有屬性(這里的屬性包括私有的成員變量,方法)
//在A類中申明了一個(gè)B類,此B類就在A的內(nèi)部,并且在成員變量的位置上,所以就稱為成員內(nèi)部類
public class Outer {
    private String id = "11923020124";

    class Inner {
        public void in() {
            System.out.println("這是內(nèi)部類方法");
        }

        //內(nèi)部類訪問(wèn)外部類私有的成員變量
        public void getId() {
            System.out.println("id: " + id);
        }

        public void useOut() {
            out();
        }
    }

    public void out() {
        System.out.println("這是外部類方法");
    }
}

class Test {


    public static void main(String[] args) {
        //實(shí)例化成員內(nèi)部類分兩步
        //1、實(shí)例化外部類
        Outer outObject = new Outer();
        //2、通過(guò)外部類調(diào)用內(nèi)部類
        Outer.Inner inObject = outObject.new Inner();
        //測(cè)試,調(diào)用內(nèi)部類中的方法
        inObject.in();//打印:這是內(nèi)部類方法
        inObject.getId();
        inObject.useOut();
    }
}

在這里插入圖片描述

如果內(nèi)部類中的變量名和外部類的成員變量名一樣,要通過(guò)創(chuàng)建外部類對(duì)象 "."屬性來(lái)訪問(wèn)外部類屬性,通過(guò)this.屬性訪問(wèn)內(nèi)部類成員屬性

//在A類中申明了一個(gè)B類,此B類就在A的內(nèi)部,并且在成員變量的位置上,所以就稱為成員內(nèi)部類
public class Outer {
    private String id = "Outer Id";

    class Inner {
        private String id = "Inner Id"; //這個(gè)id跟外部類的屬性id名稱一樣。

        public void getInnerId() {
            System.out.println(id);//輸出Inner Id,內(nèi)部類中的變量會(huì)暫時(shí)將外部類的成員變量給隱藏
        }

        public void getOuterId() {
            System.out.println(Outer.this.id);//輸出Outer Id,內(nèi)部類中的變量會(huì)暫時(shí)將外部類的成員變量給隱藏
        }
    }

    public void out() {
        System.out.println("這是外部類方法");
    }
}

class Test {
    public static void main(String[] args) {
        //實(shí)例化成員內(nèi)部類分兩步
        //1、實(shí)例化外部類
        Outer outObject = new Outer();
        //2、通過(guò)外部類調(diào)用內(nèi)部類
        Outer.Inner inObject = outObject.new Inner();
        //測(cè)試,調(diào)用內(nèi)部類中的方法
        inObject.getInnerId();
        inObject.getOuterId();
    }
}

在這里插入圖片描述

說(shuō)明:

如何調(diào)用外部類的成員變量呢?通過(guò)Outer.this,因?yàn)槿绻雽?shí)例化內(nèi)部類對(duì)象,就必須通過(guò)外部類對(duì)象,當(dāng)外部類對(duì)象new出內(nèi)部類對(duì)象時(shí),會(huì)把自己(外部類對(duì)象)的引用傳到了內(nèi)部類中,所以內(nèi)部類就可以通過(guò)Outer.this來(lái)訪問(wèn)外部類的屬性和方法,到這里,你也就可以知道為什么內(nèi)部類可以訪問(wèn)外部類 的屬性和方法,這里由于有兩個(gè)相同的屬性名稱,所以需要顯示的用Outer.this來(lái)調(diào)用外部類的屬性,平常如果屬性名 不重復(fù),那么我們?cè)趦?nèi)部類中調(diào)用外部類的屬性和方法時(shí),前面就隱式的調(diào)用了Outer.this。


1.2.4 借助成員內(nèi)部類,來(lái)總結(jié)內(nèi)部類(包括4種內(nèi)部類)的通用用法:

  • 要想訪問(wèn)內(nèi)部類中的內(nèi)容,必須通過(guò)外部類對(duì)象來(lái)實(shí)例化內(nèi)部類。
  • 能夠訪問(wèn)外部類所有的屬性和方法,原理就是在通過(guò)外部類對(duì)象實(shí)例化內(nèi)部類對(duì)象時(shí),外部類對(duì)象把自己的引用傳進(jìn)了內(nèi)部類,使內(nèi)部類可以用通過(guò)Outer.this去調(diào)用外部類的屬性和方法,一般都是隱式調(diào)用了,但是當(dāng)內(nèi)部類中有屬性或者方法名和外部類中的屬性或方法名相同的時(shí)候,就需要通過(guò)顯式調(diào)用Outer.this了。

到此這篇關(guān)于Java面向?qū)ο笾畠?nèi)部類案例講解的文章就介紹到這了,更多相關(guān)Java面向?qū)ο笾畠?nèi)部類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyEclipse2018中安裝Mybatis generator插件的實(shí)現(xiàn)步驟

    MyEclipse2018中安裝Mybatis generator插件的實(shí)現(xiàn)步驟

    這篇文章主要介紹了MyEclipse2018中安裝Mybatis generator插件的實(shí)現(xiàn)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • ShardingSphere數(shù)據(jù)分片算法及測(cè)試實(shí)戰(zhàn)

    ShardingSphere數(shù)據(jù)分片算法及測(cè)試實(shí)戰(zhàn)

    這篇文章主要為大家介紹了ShardingSphere數(shù)據(jù)分片算法及測(cè)試實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)

    java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)

    這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)與算法(快速排序法),,快速排序法是實(shí)踐中的一種快速的排序算法,在c++或?qū)ava基本類型的排序中特別有用,下面我們一起進(jìn)入文章學(xué)習(xí)更詳細(xì)的內(nèi)容吧,需要的朋友可以參考下
    2022-02-02
  • 詳解Java中String類的各種用法

    詳解Java中String類的各種用法

    Java中定義了String和StringBuffer兩個(gè)類來(lái)封裝對(duì)字符串的各種操作,存放于java.lang包中,是Java語(yǔ)言的核心類,提供了字符串的比較、查找、截取、大小寫轉(zhuǎn)換等操作,無(wú)需導(dǎo)入即可直接使用它們。讓我們來(lái)詳細(xì)了解它吧
    2021-11-11
  • springboot的LogbackLoggingSystem配置加載流程解析

    springboot的LogbackLoggingSystem配置加載流程解析

    這篇文章主要介紹了springboot的LogbackLoggingSystem配置加載流程源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 關(guān)于TreeMap自定義排序規(guī)則的兩種方式

    關(guān)于TreeMap自定義排序規(guī)則的兩種方式

    這篇文章主要介紹了關(guān)于TreeMap自定義排序規(guī)則的兩種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • JAVA構(gòu)造函數(shù)(方法)示例詳解

    JAVA構(gòu)造函數(shù)(方法)示例詳解

    構(gòu)造函數(shù),是一種特殊的方法,主要用來(lái)在創(chuàng)建對(duì)象時(shí)初始化對(duì)象,即為對(duì)象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語(yǔ)句中,這篇文章主要給大家介紹了關(guān)于JAVA構(gòu)造函數(shù)(方法)的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 一篇文章帶你了解spring事務(wù)失效的多種場(chǎng)景

    一篇文章帶你了解spring事務(wù)失效的多種場(chǎng)景

    在日常編碼過(guò)程中常常涉及到事務(wù),在前兩天看到一篇文章提到了Spring事務(wù),那么在此總結(jié)下在Spring環(huán)境下事務(wù)失效的幾種原因.
    2021-09-09
  • Java8使用lambda實(shí)現(xiàn)Java的尾遞歸

    Java8使用lambda實(shí)現(xiàn)Java的尾遞歸

    這篇文章主要介紹了Java8使用lambda實(shí)現(xiàn)Java的尾遞歸的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程

    Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論