內(nèi)部類詳解-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供東港網(wǎng)站建設(shè)、東港做網(wǎng)站、東港網(wǎng)站設(shè)計(jì)、東港網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、東港企業(yè)網(wǎng)站模板建站服務(wù),十多年東港做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

一、什么是內(nèi)部類

二、內(nèi)部類的劃分

2.1 實(shí)例內(nèi)部類

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

2.3 局部?jī)?nèi)部類

2.4 匿名內(nèi)部類


一、什么是內(nèi)部類

定義:當(dāng)一個(gè)事物的內(nèi)部,還有一個(gè)完整的結(jié)構(gòu)進(jìn)行描述,而這個(gè)內(nèi)部的完整的結(jié)構(gòu)又只為外部事物提供服務(wù),那么這個(gè)內(nèi)部的完整結(jié)構(gòu)做好使用內(nèi)部類。在Java中,可以將一個(gè)類定義在另一個(gè)類或者一個(gè)

public class OutClass {
class InnerClass{
}
}
// OutClass是外部類
// InnerClass是內(nèi)部類

方法的內(nèi)部,前者成為內(nèi)部類,后者成為外部類。內(nèi)部類也是封裝的一種體現(xiàn)

【注意事項(xiàng)】

1.定義在class類名{}花括號(hào)外部的,即使是在一個(gè)文件里,都不能成為內(nèi)部類

public class A{
}

class B{
}

//A 和 B是兩個(gè)獨(dú)立的類,彼此之間沒有關(guān)系。

2. 內(nèi)部類和外部類共用同一個(gè)java源文件,但是經(jīng)過(guò)編譯之后,內(nèi)部類會(huì)形成單獨(dú)的字節(jié)碼文件

二、內(nèi)部類的劃分

在外部類中,內(nèi)部類定義位置與外部類成員所處的位置相同,因此稱為成員內(nèi)部類。

2.1 實(shí)例內(nèi)部類

即為被static修飾的成員內(nèi)部類。

class OutClass {
    private int a;
    static int b;
    int c;

    public void method() {
        a = 10;
        System.out.println(a);
    }

    public static void methodB() {
        System.out.println(b);
    }

    //    實(shí)例內(nèi)部類:未被static修飾
    class InnerClass {
        //在實(shí)例內(nèi)部類中可以直接訪問(wèn)外部類中:任意訪問(wèn)限定符修飾的成員
        int c;

        public void methodInner() {
            a = 100;
            b = 200;
            method();
            methodB();
//如果外部類和實(shí)例內(nèi)部類中具有相同名稱成員時(shí),優(yōu)先訪問(wèn)的是內(nèi)部類自己的
            c = 300;
            System.out.println(c);
            //如果要訪問(wèn)外部類同名成員的時(shí)候,必須外部類名稱.this.同名成員名字
            OutClass.this.c = 400;
            System.out.println(OutClass.this.c);
            System.out.println(c);
        }
    }
    public static void main(String[] args) {
// 外部類:對(duì)象創(chuàng)建 以及 成員訪問(wèn)
        OutClass outClass = new OutClass();
        System.out.println(outClass.a);
        System.out.println(OutClass.b);
        System.out.println(outClass.c);
        outClass.method();
        outClass.methodB();
        System.out.println("=============實(shí)例內(nèi)部類的訪問(wèn)=============");
// 要訪問(wèn)實(shí)例內(nèi)部類中成員,必須要?jiǎng)?chuàng)建實(shí)例內(nèi)部類的對(duì)象
// 而普通內(nèi)部類定義與外部類成員定義位置相同,因此創(chuàng)建實(shí)例內(nèi)部類對(duì)象時(shí)必須借助外部類
// 創(chuàng)建實(shí)例內(nèi)部類對(duì)象
        OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();
// 上述語(yǔ)法比較怪異,也可以先將外部類對(duì)象先創(chuàng)建出來(lái),然后再創(chuàng)建實(shí)例內(nèi)部類對(duì)象
        OutClass.InnerClass innerClass2 = outClass.new InnerClass();
        innerClass2.methodInner();

    }
}

【注意事項(xiàng)】

1. 外部類中的任何成員都可以在實(shí)例內(nèi)部類方法中直接訪問(wèn)

2. 實(shí)例內(nèi)部類所處的位置與外部類成員位置相同,因此也受public、private等訪問(wèn)限定符的約束

3. 在實(shí)例內(nèi)部類方法中訪問(wèn)同名的成員時(shí),優(yōu)先訪問(wèn)自己的,如果要訪問(wèn)外部類同名的成員,必須:外部類名 稱.this.同名成員 來(lái)訪問(wèn)

4. 實(shí)例內(nèi)部類對(duì)象必須在先有外部類對(duì)象前提下才能創(chuàng)建(靜態(tài)的可直接通過(guò)類名訪問(wèn))

5. 實(shí)例內(nèi)部類的非靜態(tài)方法中包含了一個(gè)指向外部類對(duì)象的引用

6. 外部類中,不能直接訪問(wèn)實(shí)例內(nèi)部類中的成員,如果要訪問(wèn)必須先要?jiǎng)?chuàng)建內(nèi)部類的對(duì)象。

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

被static修飾的內(nèi)部成員類稱為靜態(tài)內(nèi)部類。

class OutClass {
    private int a;
    static int b;
    public void methodA(){
        a = 10;
        System.out.println(a);
    }
    public static void methodB(){
        System.out.println(b);
    }
    // 靜態(tài)內(nèi)部類:被static修飾的成員內(nèi)部類
    static class InnerClass{
        public void methodInner(){
// 在內(nèi)部類中只能訪問(wèn)外部類的靜態(tài)成員
// a = 100; // 編譯失敗,因?yàn)閍不是靜態(tài)類成員變量
            b =200;
//methodA(); // 編譯失敗,因?yàn)閙ethodA()不是類成員方法
//            methodB();
        }
    }
    public static void main(String[] args) {
// 靜態(tài)內(nèi)部類對(duì)象創(chuàng)建 & 成員訪問(wèn)
        OutClass.InnerClass innerClass = new OutClass.InnerClass();
        innerClass.methodInner();
    }
}

【注意事項(xiàng)】

1.在靜態(tài)內(nèi)部類中只能訪問(wèn)外部類中的靜態(tài)成員(如果想訪問(wèn),必須實(shí)例化外部類對(duì)象)

2.創(chuàng)建靜態(tài)內(nèi)部類對(duì)象時(shí),不需要先創(chuàng)建外部類對(duì)象

3.外部類可直接訪問(wèn)靜態(tài)內(nèi)部類所有成員變量與方法

2.3 局部?jī)?nèi)部類

定義在外部類的方法體或者{}中,該種內(nèi)部類只能在其定義的位置使用,一般使用的非常少,此處簡(jiǎn)單了解下語(yǔ)法格式。

public class OutClass {
    int a = 10;
    public void method(){
    int b = 10;
// 局部?jī)?nèi)部類:定義在方法體內(nèi)部
// 不能被public、static等訪問(wèn)限定符修飾
class InnerClass{
    public void methodInnerClass(){
        System.out.println(a);
        System.out.println(b);
    }
}
// 只能在該方法體內(nèi)部使用,其他位置都不能用
    InnerClass innerClass = new InnerClass();
    innerClass.methodInnerClass();
    }
    public static void main(String[] args) {
//     OutClass.InnerClass innerClass = null; 編譯失敗
    }
}

【注意事項(xiàng)】

1. 局部?jī)?nèi)部類只能在所定義的方法體內(nèi)部使用

2. 不能被public、static等修飾符修飾

3. 編譯器也有自己獨(dú)立的字節(jié)碼文件,命名格式:外部類名字$數(shù)字內(nèi)部類名字.class

4. 幾乎不會(huì)使用

2.4 匿名內(nèi)部類
interface First{
    void func();
}

class Second implements First{
    @Override
        public void func(){
            System.out.println("hello word");
        }
    }
public class Test {
    public static void main(String[] args) {
//此時(shí)是和上述的Second等價(jià)的,若想訪問(wèn)接口中的成員,可在大括號(hào)后通過(guò).訪問(wèn)
        new First(){
            @Override
            public void func() {
                System.out.println("akai");
            }
        }.func();
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁(yè)名稱:內(nèi)部類詳解-創(chuàng)新互聯(lián)
文章來(lái)源:http://www.muchs.cn/article20/deogco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、建站公司、網(wǎng)站策劃、服務(wù)器托管、微信小程序、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站