Java中的內(nèi)部類

概念:

內(nèi)部類( Inner Class )就是定義在另外一個(gè)類里面的類玛痊。與之對(duì)應(yīng)藕夫,包含內(nèi)部類的類被稱為外部類克伊。

作用:
  1. 內(nèi)部類提供了更好的封裝谆膳,可以把內(nèi)部類隱藏在外部類之內(nèi)皮官,不允許同一個(gè)包中的其他類訪問該類

  2. 內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù)脯倒,包括私有的數(shù)據(jù)

  3. 內(nèi)部類所實(shí)現(xiàn)的功能使用外部類同樣可以實(shí)現(xiàn),只是有時(shí)使用內(nèi)部類更方便

內(nèi)部類方法實(shí)例:
//外部類HelloWorld
public class HelloWorld {
    
    // 內(nèi)部類Inner捺氢,類Inner在類HelloWorld的內(nèi)部
    public class Inner {
        
        // 內(nèi)部類的方法
        public void show() {
            System.out.println("welcome to imooc!");
        }
    }
    
    public static void main(String[] args) {
        
        // 創(chuàng)建外部類對(duì)象
        HelloWorld hello = new HelloWorld();
        // 創(chuàng)建內(nèi)部類對(duì)象
        Inner i = hello.new Inner();
        // 調(diào)用內(nèi)部類對(duì)象的方法
        i.show();
    }
}

Java中的成員內(nèi)部類

代碼示例:

public class HelloWorld {
    //外部類的私有屬性
    private int a = 99;
    //內(nèi)部類
    public class Inner{
        //內(nèi)部類成員
        int b = 2;
        
        //內(nèi)部類方法
        public void test(){
            
            System.out.println("訪問外部類變量"+a);
            System.out.println("訪問內(nèi)部類變量"+b);
        }
    }
    
    public static void main(String[] args){
        //要想調(diào)用內(nèi)部類方法步驟
        //1.初始化一個(gè)外部類對(duì)象
        HelloWorld out = new HelloWorld();
        //2.利用外部類對(duì)象的new方法+內(nèi)部類構(gòu)造方法
        Inner in = out.new Inner();
        //3.利用內(nèi)部類對(duì)象藻丢,調(diào)用內(nèi)部類方法
        in.test();
    }
}
運(yùn)行結(jié)果.png
public class HelloWorld {

    //外部類的私有屬性name
    private String name = "imooc";
    
    //外部類的成員屬性
    int age = 20;
    
    //成員內(nèi)部類Inner
    public class Inner {
        String name = "愛慕課";
        //內(nèi)部類中的方法
        public void show() { 
            System.out.println("外部類中的name:" + HelloWorld.this.name);
            System.out.println("內(nèi)部類中的name:" +name);
            System.out.println("外部類中的age:" + age);
        }
    }
    
    //測(cè)試成員內(nèi)部類
    public static void main(String[] args) {
        
        //創(chuàng)建外部類的對(duì)象
        HelloWorld o = new HelloWorld (); 
        
        //創(chuàng)建內(nèi)部類的對(duì)象
        Inner inn =o.new Inner();
        
        //調(diào)用內(nèi)部類對(duì)象的show方法
        inn.show();
    }

}
運(yùn)行結(jié)果.png
#######總結(jié):根據(jù)上述實(shí)例內(nèi)部類的使用方法
1、Inner類定義在HelloWorld類的內(nèi)部摄乒,Inner類可以使用任意訪問控制符
2悠反、內(nèi)部類的方法中,可以直接訪問HelloWorld類中的數(shù)據(jù)馍佑,不受任何訪問控制符的影響(也就是上例中斋否,在test方法中可以訪問外部類的私有熟悉a)
3、定義了成員內(nèi)部類后拭荤,必須使用外部類對(duì)象來創(chuàng)建內(nèi)部類茵臭,而不能直接去new一個(gè)內(nèi)部類對(duì)象,即:`內(nèi)部類 對(duì)象名 = 外部對(duì)象.new 內(nèi)部類構(gòu)造方法()`;
4舅世、外部類是不能直接使用內(nèi)部類的成員和方法的
5笼恰、如果外部類和內(nèi)部類具有`重名`的成員變量或方法時(shí),內(nèi)部類默認(rèn)訪問的是自己的成員變量或方法 / 如果要訪問外部類的成員變量歇终,需使用`this`關(guān)鍵字

Java中的靜態(tài)內(nèi)部類
######特點(diǎn):
1、靜態(tài)內(nèi)部類是static修飾的內(nèi)部類
2逼龟、`靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員`(但可以通過new 外部類().成員的方式訪問)
3评凝、如果外部類的靜態(tài)成員與內(nèi)部類的成員名相同,可通過`類名.靜態(tài)成員`訪問外部類的靜態(tài)成員腺律,如果不相同則可直接調(diào)用外部類的靜態(tài)成員
4奕短、創(chuàng)建靜態(tài)內(nèi)部類的對(duì)象時(shí)宜肉,不需要外部類的對(duì)象,可以直接創(chuàng)建(與非靜態(tài)內(nèi)部類不一樣)

代碼實(shí)例

//外部類
public class HelloWorld {
    
    // 外部類中的靜態(tài)變量score
    private static int score = 84;
    
    // 創(chuàng)建靜態(tài)內(nèi)部類
    public static class SInner {
        // 內(nèi)部類中的變量score
        int score = 91;
        
        public void show() {
            System.out.println("訪問外部類中的score:" + HelloWorld.score);
            System.out.println("訪問內(nèi)部類中的score:" + score);
        }
    }

    // 測(cè)試靜態(tài)內(nèi)部類
    public static void main(String[] args) {
        // 直接創(chuàng)建內(nèi)部類的對(duì)象
        
        SInner si = new SInner();
        // 調(diào)用show方法
        si.show();
    }
}

Java中的方法內(nèi)部類

概念:方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中翎碑,方法內(nèi)部類只在該方法的內(nèi)部可見谬返,即只在該方法內(nèi)可以使用。

//外部類
public class HelloWorld {
    
    private String name = "愛慕課";
    
    // 外部類中的show方法
    public void show() { 
        // 定義方法內(nèi)部類
        class MInner {
            int score = 83;
            public int getScore() {
                return score + 10;
            }
        }
        
        // 創(chuàng)建方法內(nèi)部類的對(duì)象
        MInner mi = new MInner();
        
        // 調(diào)用內(nèi)部類的方法
        int newScore = mi.getScore();
        
        System.out.println("姓名:" + name + "\n加分后的成績(jī):" + newScore);
    }
    
    // 測(cè)試方法內(nèi)部類
    public static void main(String[] args) {
        
        // 創(chuàng)建外部類的對(duì)象
        HelloWorld mo = new HelloWorld();
        
        // 調(diào)用外部類的方法
        mo.show();
    }
}```
注意:由于方法內(nèi)部類不能被外部訪問日杈,所以不能使用訪問修飾符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遣铝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莉擒,更是在濱河造成了極大的恐慌酿炸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涨冀,死亡現(xiàn)場(chǎng)離奇詭異填硕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鹿鳖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門扁眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翅帜,你說我怎么就攤上這事姻檀。” “怎么了藕甩?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵施敢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我狭莱,道長(zhǎng)僵娃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任腋妙,我火速辦了婚禮默怨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骤素。我一直安慰自己匙睹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布济竹。 她就那樣靜靜地躺著痕檬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪送浊。 梳的紋絲不亂的頭發(fā)上梦谜,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼唁桩。 笑死闭树,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荒澡。 我是一名探鬼主播报辱,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼单山!你這毒婦竟也來了碍现?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤饥侵,失蹤者是張志新(化名)和其女友劉穎鸵赫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏升,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辩棒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膨疏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片一睁。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖佃却,靈堂內(nèi)的尸體忽然破棺而出者吁,到底是詐尸還是另有隱情,我是刑警寧澤饲帅,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布复凳,位于F島的核電站,受9級(jí)特大地震影響灶泵,放射性物質(zhì)發(fā)生泄漏育八。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一赦邻、第九天 我趴在偏房一處隱蔽的房頂上張望髓棋。 院中可真熱鬧,春花似錦惶洲、人聲如沸按声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽签则。三九已至,卻和暖如春铐料,著一層夾襖步出監(jiān)牢的瞬間怀愧,已是汗流浹背侨颈。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芯义,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓妻柒,卻偏偏與公主長(zhǎng)得像扛拨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子举塔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • #內(nèi)部類的定義 Java中允許在類中定義另一個(gè)類绑警,這個(gè)定義在其他類內(nèi)部的類就是內(nèi)部類(嵌套類),包含內(nèi)部類的類也被...
    Enigmaaaaa閱讀 542評(píng)論 0 0
  • Java 內(nèi)部類 分四種:成員內(nèi)部類央渣、局部?jī)?nèi)部類计盒、靜態(tài)內(nèi)部類和匿名內(nèi)部類。 1芽丹、成員內(nèi)部類: 即作為外部類的一個(gè)成...
    ikaroskun閱讀 1,223評(píng)論 0 13
  • Java中的內(nèi)部類共分為四種: 靜態(tài)內(nèi)部類static inner class (also called nest...
    WebberCao閱讀 425評(píng)論 0 1
  • 來自: Nerxious - 博客園鏈接:http://www.cnblogs.com/nerxious/arch...
    rill_閱讀 180評(píng)論 0 0
  • 有多少人喜歡使用內(nèi)部類北启,我就問你累不累。閑話不多說拔第。在Java中咕村,可以將一個(gè)類定義在另一個(gè)類里面或者一個(gè)方法里面,...
    indexImprov閱讀 454評(píng)論 0 0