內(nèi)部類

內(nèi)部類

把類定義在其他類的內(nèi)部,這個(gè)類就被稱為內(nèi)部類朱嘴。

內(nèi)部類可以直接訪問(wèn)外部類的成員倾鲫,

內(nèi)部類編譯生成的.class文件是Outer$Inner.class

內(nèi)部類具有延遲加載的功能

成員內(nèi)部類

在類的成員位置的內(nèi)部類,就是成員內(nèi)部類

訪問(wèn)

public class InnerClassDome {
    public static void main(String[] args) {
        Outer.Inner i = new Outer().new Inner();        //不需要導(dǎo)包直接使用
        i.show();
        Inner i2 = new Outer().new Inner();             //需要導(dǎo)包import com.leex.interClass.Outer.Inner;
        Inner i3 = new Outer().getInner();              //如果Inner是私有的類萍嬉,private class Innter{}
        Outer.Inner i4 = new Outer().getInner();
    }
}
class Outer {
    private int num = 10;
    class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    public Inner getInner() {       //這樣寫還可以給訪問(wèn)加限制,并用private修飾Inner,提高內(nèi)部類的安全性
        return new Inner();
    }
}

普通的類只能被public和默認(rèn)修飾乌昔,內(nèi)部類可以被public,protected壤追,默認(rèn)磕道,private

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

靜態(tài)內(nèi)部類可以理解成外部類的靜態(tài)成員

  1. 普通的類不能被static修飾,而內(nèi)部類可以
  2. 靜態(tài)內(nèi)部類只能訪問(wèn)外部?jī)?nèi)的靜態(tài)屬性行冰,不能訪問(wèn)非靜態(tài)的屬性數(shù)

訪問(wèn)

成員內(nèi)部類被靜態(tài)修飾后的訪問(wèn)

public class InnerClassDome2 {
    public static void main(String[] args) {
        Outer2.Inner i = new Outer2.Inner();
        Inner i1 = new Inner();         //要導(dǎo)包溺蕉,一般不這樣寫伶丐,代碼可讀性差
        
    }
}
class Outer2 {
    private static int num = 10;
    static class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    public Inner getInner() {       //同樣可以用方法訪問(wèn),但是失去了static的意義
        return new Inner();
    }
}

內(nèi)部類為了方便訪問(wèn)加static焙贷,為了安全加private

注意

內(nèi)部類和外部類沒(méi)有繼承關(guān)系

/*
面試題:
    要求請(qǐng)?zhí)羁辗謩e輸出30撵割,20,10辙芍。
    
注意:
    1:內(nèi)部類和外部類沒(méi)有繼承關(guān)系啡彬。
    2:通過(guò)外部類名限定this對(duì)象
        Outer.this
*/
class Outer {
    public int num = 10;
    class Inner {
        public int num = 20;
        public void show() {
            int num = 30;
            System.out.println(num);
            System.out.println(this.num);
            //System.out.println()
            //System.out.println(new Outer().num); //也可以
            System.out.println(Outer.this.num);
        }
    }
}
class InnerClassTest {
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();
        oi.show();
    }   
}

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

1.7之前只能訪問(wèn)final修飾的局部變量

1.8之后可以訪問(wèn)非final修飾的局部變量

public class InnerClassDome2 {
    public static void main(String[] args) {
        new Outer2().mothed();
    }
}
class Outer2 {
    private int num = 10;
    public void mothed() {
        class Inner {
            private int num2 = 20;
            public void show() {
                System.out.println(num);        //10
                System.out.println(num2);       //20
            }
        }
        Inner i = new Inner();
        i.show();
    }
}

匿名內(nèi)部類

  1. 匿名內(nèi)部類
    • 就是內(nèi)部類的簡(jiǎn)化寫法。
  2. 前提:存在一個(gè)類或者接口
    • 這里的類可以是具體類也可以是抽象類故硅。
  3. 本質(zhì)是一個(gè)繼承了該類或者實(shí)現(xiàn)了該接口的子類匿名對(duì)象庶灿。

class Outer2 {
    Inner3 i3 = new Inner3() {                      //在外部類的成員位置,必須要有變量接收對(duì)象(多態(tài))
        @Override
        public void show() {
            System.out.println("Inner3");
        }
    };
    public void mothed() {
        new Inner() {                               //在局部位置吃衅,可以接收也可以接收
            @Override
            public void show() {
                System.out.println("Inner");
            }
        }.show();                                   //直接調(diào)用方法往踢,只能用一次
        Inner2 i = new Inner2() {                   //多態(tài)
            @Override
            public void show() {
                System.out.println("Inner2");
            }
        };
        i.show();                                   //獲取后調(diào)用
        i3.show();
    }
}
interface Inner{
    public void show();
}
abstract class Inner2{
    public abstract void show();
}
abstract class Inner3{
    public abstract void show();
}

應(yīng)用

當(dāng)一個(gè)方法的形參是一個(gè)接口或抽象類時(shí),傳入的應(yīng)該是一個(gè)該接口或抽象類的具體子類的對(duì)象徘层,所以可以使用匿名內(nèi)部類

/*
匿名內(nèi)部類在開(kāi)發(fā)中的使用
*/
interface Person {
    public abstract void study();
}

class PersonDemo {
    //接口名作為形式參數(shù)
    //其實(shí)這里需要的不是接口峻呕,而是該接口的實(shí)現(xiàn)類的對(duì)象
    public void method(Person p) {
        p.study();
    }
}

//實(shí)現(xiàn)類
class Student implements Person {
    public void study() {
        System.out.println("好好學(xué)習(xí),天天向上");
    }
}

class InnerClassTest2 {
    public static void main(String[] args) {
        //測(cè)試
        PersonDemo pd = new PersonDemo();
        Person p = new Student();
        pd.method(p);
        System.out.println("--------------------");
        
        //匿名內(nèi)部類在開(kāi)發(fā)中的使用
        //匿名內(nèi)部類的本質(zhì)是繼承類或者實(shí)現(xiàn)了接口的子類匿名對(duì)象
        pd.method(new Person(){
            public void study() {
                System.out.println("好好學(xué)習(xí),天天向上");
            }
        });
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市趣效,隨后出現(xiàn)的幾起案子瘦癌,更是在濱河造成了極大的恐慌,老刑警劉巖跷敬,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯私,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡西傀,警方通過(guò)查閱死者的電腦和手機(jī)斤寇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拥褂,“玉大人娘锁,你說(shuō)我怎么就攤上這事〗染椋” “怎么了致盟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尤慰。 經(jīng)常有香客問(wèn)我馏锡,道長(zhǎng),這世上最難降的妖魔是什么伟端? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任杯道,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘党巾。我一直安慰自己萎庭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布齿拂。 她就那樣靜靜地躺著驳规,像睡著了一般。 火紅的嫁衣襯著肌膚如雪署海。 梳的紋絲不亂的頭發(fā)上吗购,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音砸狞,去河邊找鬼捻勉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刀森,可吹牛的內(nèi)容都是我干的踱启。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼研底,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼埠偿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起榜晦,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胚想,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后芽隆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡统屈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年胚吁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愁憔。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腕扶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吨掌,到底是詐尸還是另有隱情半抱,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布膜宋,位于F島的核電站窿侈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秋茫。R本人自食惡果不足惜史简,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肛著。 院中可真熱鬧圆兵,春花似錦跺讯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至超凳,卻和暖如春愈污,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聪建。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工钙畔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人金麸。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓擎析,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挥下。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揍魂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問(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閱讀 1,949評(píng)論 0 1
  • Java 內(nèi)部類 分四種:成員內(nèi)部類庄蹋、局部?jī)?nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類迷雪。 1限书、成員內(nèi)部類: 即作為外部類的一個(gè)成...
    ikaroskun閱讀 1,232評(píng)論 0 13
  • We believe that writing is about content, about what you ...
    hongXkeX閱讀 936評(píng)論 1 1
  • #內(nèi)部類的定義 Java中允許在類中定義另一個(gè)類,這個(gè)定義在其他類內(nèi)部的類就是內(nèi)部類(嵌套類)章咧,包含內(nèi)部類的類也被...
    Enigmaaaaa閱讀 545評(píng)論 0 0
  • 8點(diǎn)一上班就聽(tīng)同事在那嘆氣赁严,我們幾個(gè)就問(wèn)怎么回事扰柠,她就說(shuō)起她的大女兒在高二上學(xué),最近身體不適疼约,但是女兒的班主任并沒(méi)...
    8月17閱讀 157評(píng)論 0 0