內(nèi)部類

轉(zhuǎn)載自:http://www.cnblogs.com/chenssy/p/3388487.html

內(nèi)部類:在一個(gè)類的內(nèi)部定義了一個(gè)類
內(nèi)部類的作用:使用內(nèi)部類的原因是:每個(gè)內(nèi)部類都能獨(dú)立地繼承一個(gè)(接口)實(shí)現(xiàn),所以無(wú)論是外圍類是否已經(jīng)繼承了某個(gè)(接口)實(shí)現(xiàn)骑素,對(duì)于內(nèi)部類都沒(méi)有影響。
使用內(nèi)部類帶來(lái)的好處:

  • 內(nèi)部類可以用多個(gè)實(shí)例膏燕,每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與其他外圍對(duì)象的信息相互獨(dú)立悟民。
  • 在單個(gè)外圍類中坝辫,可以讓多個(gè)內(nèi)部類實(shí)現(xiàn)同一接口或者繼承某一個(gè)類(包括抽象類),具體的實(shí)現(xiàn)可以不同射亏。
  • 創(chuàng)建內(nèi)部類對(duì)象的時(shí)刻并不依賴與外圍類對(duì)象的創(chuàng)建近忙。
  • 內(nèi)部類并沒(méi)有令人迷惑的“is - a ”關(guān)系,它是獨(dú)立的
  • 內(nèi)部類提供了更好的封裝鸦泳,除了該外圍類银锻,其他類都不能訪問(wèn)。

內(nèi)部類用法

成員內(nèi)部類

成員內(nèi)部類也是最普通的內(nèi)部類做鹰,它是外圍類的一個(gè)成員,所以他是可以無(wú)限制的訪問(wèn)外圍類的所有成員變量和方法鼎姐,包括private修飾的钾麸。外圍類要訪問(wèn)內(nèi)部列的成員屬性和方法時(shí)更振,必須通過(guò)內(nèi)部類的實(shí)例倆訪問(wèn)。

在成員內(nèi)部類中:

  • 成員內(nèi)部類中不能存在private
  • 成員內(nèi)部類只有在創(chuàng)建了外圍類才能創(chuàng)建內(nèi)部類
    OuterClass outer = new OuterClass();
    OuterClass.InnerClass inner = outer.getInnerClass();
    OuterClass 屬于外圍類饭尝,InnerClass屬于OuterClass的內(nèi)部類肯腕。
  • 推薦使用getxxx()來(lái)獲取成員內(nèi)部類,尤其是該內(nèi)部類的構(gòu)造函數(shù)無(wú)參數(shù)時(shí)钥平。

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

有這樣一種內(nèi)部類实撒,它是嵌套在方法和作用域內(nèi)的,對(duì)于這個(gè)類的使用主要是應(yīng)用與解決比較復(fù)雜的問(wèn)題涉瘾,想創(chuàng)建一個(gè)類來(lái)輔助我們的解決方案知态,到那時(shí)又不希望這個(gè)類是公共可用的,所以就產(chǎn)生了局部?jī)?nèi)部類立叛,局部?jī)?nèi)部類和成員內(nèi)部類一樣被編譯负敏,只是它的作用域發(fā)生了改變,它只能在該方法和屬性中被使用秘蛇,出了該方法和屬性就會(huì)失效其做。

  • 定義在方法中

        public class Parcel5 { 
            public Destionation destionation(String str){
                 class PDestionation implements Destionation{ 
                      private String label; 
                      private PDestionation(String whereTo){
                                label = whereTo;
                       }
                       public String readLabel(){
                               return label; 
                       }
               }
               return new PDestionation(str);
           } 
              public static void main(String[] args) { 
                Parcel5 parcel5 = new Parcel5();
                Destionation d = parcel5.destionation("chenssy");
              }
        }
    
  • 定義在作用域中
    public class Parcel6 {
    private void internalTracking(boolean b){
    if(b){
    class TrackingSlip{
    private String id;
    TrackingSlip(String s) {
    id = s;
    }
    String getSlip(){
    return id;
    }
    }
    TrackingSlip ts = new TrackingSlip("chenssy");
    String string = ts.getSlip();
    }
    }
    public void track(){
    internalTracking(true);
    }
    public static void main(String[] args) {
    Parcel6 parcel6 = new Parcel6();
    parcel6.track();
    }
    }

匿名內(nèi)部類

      public class OuterClass {
                 public InnerClass getInnerClass(final int num,String str2){
                            return new InnerClass(){
                                       int number = num + 3;
                                       public int getNumber(){
                                                  return number;
                                        }
                              };        /* 注意:分號(hào)不能省 */
                   }

                public static void main(String[] args) {
                            OuterClass out = new OuterClass();
                            InnerClass inner = out.getInnerClass(2, "chenssy");
                            System.out.println(inner.getNumber());
                 }
      }
      interface InnerClass {
              int getNumber();
       }

注意:

  • 匿名內(nèi)部類是沒(méi)有訪問(wèn)修飾符的
  • new 匿名內(nèi)部類,這個(gè)類首先要存在赁还。
  • 注意getInnerClass()方法的形參妖泄,第一個(gè)形參是用final修飾的,而第二個(gè)卻沒(méi)有艘策。同時(shí)我們也發(fā)現(xiàn)第二個(gè)形參在匿名內(nèi)部類中沒(méi)有使用過(guò)浮庐,所以當(dāng)所在方法的形參需要被匿名內(nèi)部類使用,那么這個(gè)形參就必須為final柬焕。
  • 匿名內(nèi)部類是沒(méi)有構(gòu)造方法的审残。因?yàn)樗B名字都沒(méi)有何來(lái)構(gòu)造方法。
  • 匿名內(nèi)部類必須實(shí)現(xiàn)一個(gè)父類或者一個(gè)接口斑举。
Paste_Image.png

Paste_Image.png

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

使用static修飾的內(nèi)部類我們稱之為靜態(tài)內(nèi)部類搅轿。
靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類之間存在一個(gè)最大的區(qū)別,我們知道非靜態(tài)內(nèi)部類在編譯完成之后會(huì)隱含地保存著一個(gè)引用富玷,該引用是指向創(chuàng)建它的外圍內(nèi)璧坟,但是靜態(tài)內(nèi)部類卻沒(méi)有。沒(méi)有這個(gè)引用就意味著:

  • 它的創(chuàng)建是不需要依賴于外圍類的赎懦。
  • 它不能使用任何外圍類的非static成員變量和方法雀鹃。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市励两,隨后出現(xiàn)的幾起案子黎茎,更是在濱河造成了極大的恐慌,老刑警劉巖当悔,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傅瞻,死亡現(xiàn)場(chǎng)離奇詭異踢代,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嗅骄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)胳挎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人溺森,你說(shuō)我怎么就攤上這事慕爬。” “怎么了屏积?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵医窿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肾请,道長(zhǎng)留搔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任铛铁,我火速辦了婚禮隔显,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饵逐。我一直安慰自己括眠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布倍权。 她就那樣靜靜地躺著掷豺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薄声。 梳的紋絲不亂的頭發(fā)上当船,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音默辨,去河邊找鬼德频。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缩幸,可吹牛的內(nèi)容都是我干的壹置。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼表谊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钞护!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起爆办,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤难咕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體步藕,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惦界,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年挑格,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咙冗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漂彤,死狀恐怖雾消,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挫望,我是刑警寧澤立润,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站媳板,受9級(jí)特大地震影響桑腮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛉幸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一破讨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奕纫,春花似錦提陶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至升筏,卻和暖如春撑柔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背您访。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工铅忿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洋只。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓辆沦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親识虚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肢扯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • Java 內(nèi)部類 分四種:成員內(nèi)部類、局部?jī)?nèi)部類担锤、靜態(tài)內(nèi)部類和匿名內(nèi)部類蔚晨。 1、成員內(nèi)部類: 即作為外部類的一個(gè)成...
    ikaroskun閱讀 1,231評(píng)論 0 13
  • 一、介紹 內(nèi)部類是指在一個(gè)外部類的內(nèi)部再定義一個(gè)類铭腕。類名不需要和文件夾相同银择。內(nèi)部類可以是靜態(tài)static的,也可用...
    一只好奇的茂閱讀 977評(píng)論 4 21
  • [toc] 內(nèi)部類 內(nèi)部類作為外部類的成員累舷,可以使用人已訪問(wèn)控制符修飾浩考。 外部類的上一級(jí)程序單元是包,所以只有兩個(gè)...
    卡路fly閱讀 310評(píng)論 0 2
  • 又一次東方九型共修在意猶未盡中結(jié)束了袜瞬,多數(shù)人是熟悉的面孔。放下手里的工作身堡,安頓好家里的瑣事邓尤,一次一次來(lái)參加共修,圖...
    林何鳳閱讀 635評(píng)論 0 4
  • 有多少人想象著大學(xué)的生活 而又有多少人能如愿以償 不是每個(gè)人以后都能做自己想做的事 多少時(shí)候還是得在選擇面前低頭 ...
    whattime閱讀 60評(píng)論 0 0