【Java】?jī)?nèi)部類與外部類的互訪使用小結(jié)

原博客鏈接:【Java】?jī)?nèi)部類與外部類的互訪使用小結(jié)

內(nèi)部類又稱為嵌套類。可以把內(nèi)部類理解為外部類的一個(gè)普通成員。

內(nèi)部類訪問(wèn)外部類

里面的可以自由訪問(wèn)外面的,規(guī)則和static一樣。(訪問(wèn)非靜態(tài)時(shí)必須先創(chuàng)建對(duì)象)

具體如下:

非靜態(tài)內(nèi)部類的非靜態(tài)方法

直接訪問(wèn)

public class Outter {
    int i = 5;
    static String string = "Hello";
    
    class Inner1{
        void Test1 () {
            System.out.println(i);
            System.out.println(string);
        }
    }
}

靜態(tài)內(nèi)部類的非靜態(tài)方法

因?yàn)殪o態(tài)方法訪問(wèn)非靜態(tài)外部成員需先創(chuàng)建實(shí)例,所以訪問(wèn)i時(shí)必須先new外部類

public class Outter {
    int i = 5;
    static String string = "Hello";
    
    static class Inner2{
        void Test1 () {
            System.out.println(new Outter().i);
            System.out.println(string);
        }
    }
}

靜態(tài)內(nèi)部類的靜態(tài)方法

規(guī)則如上

public class Outter {
    int i = 5;
    static String string = "Hello";
    
    static class Inner2{
        static void Test2 () {
            System.out.println(new Outter().i);
            System.out.println(string);
        }
    }
}

外部類訪問(wèn)內(nèi)部類

大方向:因?yàn)閷?nèi)部類理解為外部類的一個(gè)普通成員,所以外部的訪問(wèn)里面的需先new一個(gè)對(duì)象。

非靜態(tài)方法訪問(wèn)非靜態(tài)內(nèi)部類的成員:

new 內(nèi)部類對(duì)象

public class Outter {
    static void Test2() {
        System.out.println(new Outter().new Inner1().i);
    }
    class Inner1{
        int i = 5;
//      static String string = "Hello"; 定義錯(cuò)誤!
    }
}

靜態(tài)方法訪問(wèn)非靜態(tài)內(nèi)部類的成員

靜態(tài)方法Test2訪問(wèn)非靜態(tài)Inner1需先new外部類;

繼續(xù)訪問(wèn)非靜態(tài)成員i需先new 內(nèi)部類

所以訪問(wèn)規(guī)則為:new Outter().new Inner1().i。


public class Outter {  
    static void Test2(){  
        System.out.println(new Outter().new Inner1().i);  
    }  
    class Inner1{  
        int i = 5;  
//      static String string = "Hello";  定義錯(cuò)誤!  
    }  
}

非靜態(tài)方法訪問(wèn)靜態(tài)內(nèi)部類的成員

先“外部類.內(nèi)部類”訪問(wèn)至內(nèi)部類。

若訪問(wèn)非靜態(tài)成員,則需先new再訪問(wèn);若訪問(wèn)靜態(tài)成員,則可直接訪問(wèn)。

public class Outter {
    void Test2() {
        Outter.Inner2 inner2 = new Outter.Inner2();
        System.out.println(inner2.i);
        System.out.println(inner2.string);
        System.out.println(Outter.Inner2.string);
    }
    static class Inner2{
        int i = 5;
        static String string = "Hello"; // 定義錯(cuò)誤!
    }
}

非靜態(tài)方法訪問(wèn)非靜態(tài)內(nèi)部類的成員

先“外部類.內(nèi)部類”訪問(wèn)至內(nèi)部類,再new即可訪問(wèn)靜態(tài)成員。

  public class Outter {
    void Test1(){
        Outter.Inner1 inner2 = new Outter.Inner1();
        System.out.println(inner2.i);
    }
    class Inner1{
        int i = 5;
  //        static String string = "Hello"; 定義錯(cuò)誤!
    }
  }

匿名內(nèi)部類

匿名內(nèi)部類訪問(wèn)外部成員變量時(shí),成員變量前應(yīng)加final關(guān)鍵字。

        final int k = 6;
        ((Button)findViewById(R.id.button2)).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                System.out.println(k);
            }
        });

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java 內(nèi)部類 分四種:成員內(nèi)部類、局部?jī)?nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。 1、成員內(nèi)部類: 即作為外部類的一個(gè)成...
    ikaroskun閱讀 1,355評(píng)論 0 13
  • 問(wèn):Java 常見(jiàn)的內(nèi)部類有哪幾種,簡(jiǎn)單說(shuō)說(shuō)其特征? 答:靜態(tài)內(nèi)部類、成員內(nèi)部類、方法內(nèi)部類(局部?jī)?nèi)部類)、匿名內(nèi)...
    Little丶Jerry閱讀 2,231評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,697評(píng)論 18 399
  • 夢(mèng)幻新品駕到!LADURéE 2017新品一覽 繼「大腿唇彩」后,Les Merveilleuses LADURé...
    ponette閱讀 301評(píng)論 0 0
  • 火鍋加燒烤,一鍋兩用,真是好創(chuàng)意! 生活的美好與否其實(shí)只與自己的心態(tài)有關(guān),普普通通的一片面包只需放在漂亮的白色盤(pán)子...
    jasmine南京閱讀 197評(píng)論 4 3

友情鏈接更多精彩內(nèi)容