溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中如何使用內(nèi)部類

發(fā)布時(shí)間:2021-08-05 14:14:27 來源:億速云 閱讀:142 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Java中如何使用內(nèi)部類,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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類來說就稱為內(nèi)部類,而A類相對(duì)B類來說就是外部類了。

  • 內(nèi)部類不是在一個(gè)java源文件中編寫倆個(gè)平行的倆個(gè)類,而是在一個(gè)類的內(nèi)部再定義另外一個(gè)類。 我可以把外邊的類稱為外部類,在其內(nèi)部編寫的類稱為內(nèi)部類。

  • 內(nèi)部類分為四種:

    • 成員內(nèi)部類

    • 靜態(tài)內(nèi)部類

    • 局部內(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í)例化外部類,通過外部類去調(diào)用內(nèi)部類

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

Java中如何使用內(nèi)部類

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


1.2.3 【成員內(nèi)部類能干什么?】
訪問外部類的所有屬性(這里的屬性包括私有的成員變量,方法)
//在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)部類訪問外部類私有的成員變量
        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、通過外部類調(diào)用內(nèi)部類
        Outer.Inner inObject = outObject.new Inner();
        //測(cè)試,調(diào)用內(nèi)部類中的方法
        inObject.in();//打?。哼@是內(nèi)部類方法
        inObject.getId();
        inObject.useOut();
    }
}

Java中如何使用內(nèi)部類

如果內(nèi)部類中的變量名和外部類的成員變量名一樣,要通過創(chuàng)建外部類對(duì)象 "."屬性來訪問外部類屬性,通過this.屬性訪問內(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、通過外部類調(diào)用內(nèi)部類
        Outer.Inner inObject = outObject.new Inner();
        //測(cè)試,調(diào)用內(nèi)部類中的方法
        inObject.getInnerId();
        inObject.getOuterId();
    }
}

Java中如何使用內(nèi)部類

說明:

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


1.2.4 借助成員內(nèi)部類,來總結(jié)內(nèi)部類(包括4種內(nèi)部類)的通用用法:
  • 要想訪問內(nèi)部類中的內(nèi)容,必須通過外部類對(duì)象來實(shí)例化內(nèi)部類。

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

上述就是小編為大家分享的Java中如何使用內(nèi)部類了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI