第五章:面向對象基礎——內部類浅浮。

本章目標

  • 掌握內部類的優(yōu)缺點
  • 掌握內部類的使用格式
  • 掌握static聲明內部類的作用
  • 可以使用內部類訪問方法中的參數

1旭寿、具體內容

1.1暴浦、什么叫內部類

在一個類的內部還存在另外一個類溅话,則稱為內部類。

class Outer{        // 定義外部類
    private String info = "hello world" ;   // 定義外部類的私有屬性
    class Inner{    // 定義內部類
        public void print(){                // 定義內部類的方法
            System.out.println(info) ;      // 直接訪問外部類的私有屬性
        }
    };
    public void fun(){                      // 定義外部類的方法
        new Inner().print() ;               // 通過內部類的實例化對象調用方法
    }
};
public class InnerClassDemo01{
    public static void main(String args[]){
        new Outer().fun() ;                 // 調用外部類的fun()方法
    }
};
輸出結果:
hello world

以上程序中歌焦,Inner類作為Outer類的內部類存在飞几,并且在外部類的fun()方法之中直接實例化內部類的對象并調用print()方法。
內部類存在的特點:

  • 缺點:正常的一個類操作時独撇,在類中最好只定義屬性或方法屑墨,如果定義一個類的話。則肯定破壞了程序的結構
  • 有點:想要發(fā)現其優(yōu)點纷铣,則必須通過代碼拆分來觀察卵史,將以上的內部類和外部類變?yōu)閮蓚€類的形式,再完成同樣的效果搜立。
class Outer{        // 定義外部類
    private String info = "hello world" ;   // 定義外部類的私有屬性
    public void fun(){                      // 定義外部類的方法
        new Inner(this).print() ;               // 通過內部類的實例化對象調用方法
    }
    public String getInfo(){                // 增加了一個getter方法取得info內容
        return this.info ;  
    }
};
class Inner{    // 定義內部類
    private Outer out = null ;              // 聲明Outer對象
    public Inner(Outer out){
        this.out = out ;
    }
    public void print(){                // 定義內部類的方法
        System.out.println(this.out.getInfo()) ;        // 直接訪問外部類的私有屬性
    }
};
public class InnerClassDemo02{
    public static void main(String args[]){
        new Outer().fun() ;                 // 調用外部類的fun()方法
    }
};

如果將內部類拿到外部之后以躯,會發(fā)現代碼增加了,而且復雜度也增加了啄踊。使用內部類的最大優(yōu)點:可以方便訪問外部類中的私有屬性忧设。
但是,以上的內部類颠通,是無法在外部直接調用的址晕,是無法按照外部類的形式使用的。

1.2蒜哀、使用static聲明內部類

如果一個內部類使用static關鍵字聲明斩箫,則此內部類就稱為外部類吏砂,可以直接通過外部類.內部了進行訪問。

class Outer{        // 定義外部類
    private static String info = "hello world" ;    // 定義外部類的私有屬性
    static class Inner{ // 使用static定義內部類為外部類
        public void print(){                // 定義內部類的方法
            System.o ut.println(info) ;     // 直接訪問外部類的私有屬性
        }
    };
    public void fun(){                      // 定義外部類的方法
        new Inner().print() ;               // 通過內部類的實例化對象調用方法
    }
};
public class InnerClassDemo03{
    public static void main(String args[]){
        new Outer.Inner().print() ;                 // 調用外部類的fun()方法
    }
};
輸出結果:
hello world

使用static可以聲明一個內部類乘客,聲明的內部類就稱為外部類狐血,可以在類的外部調用,但是如果要想訪問外部類中的屬性易核,則此屬性必須是static訪問權限的匈织。

1.3、在外部訪問內部類

一個內部類可以通過外部類直接訪問牡直,也可以直接在其他類中調用缀匕,但是調用的格式:

  • 外部類.內部類 內部類對象 = 外部類實例.new 內部類();
class Outer{        // 定義外部類
    private String info = "hello world" ;   // 定義外部類的私有屬性
    class Inner{    // 定義內部類
        public void print(){                // 定義內部類的方法
            System.out.println(info) ;      // 直接訪問外部類的私有屬性
        }
    };
    public void fun(){                      // 定義外部類的方法
        new Inner().print() ;               // 通過內部類的實例化對象調用方法
    }
};
public class InnerClassDemo04{
    public static void main(String args[]){
        Outer out = new Outer() ;           // 外部類實例化對象
        Outer.Inner in = out.new Inner() ;  // 實例化內部類對象
        in.print() ;                        // 調用內部類的方法
    }
};
輸出結果:
hello world

1.4、在方法中定義內部類

一個內部類可以在任意的位置上定義碰逸,下面看一下在方法中定義內部類乡小。

class Outer{        // 定義外部類
    private String info = "hello world" ;   // 定義外部類的私有屬性
    public void fun(final int temp){        // 定義外部類的方法
        class Inner{                        // 在方法中定義的內部類
            public void print(){                // 定義內部類的方法
                System.out.println("類中的屬性:" + info) ;       // 直接訪問外部類的私有屬性
                System.out.println("方法中的參數:" + temp) ;
            }
        };
        new Inner().print() ;               // 通過內部類的實例化對象調用方法
    }
};
public class InnerClassDemo05{
    public static void main(String args[]){
        new Outer().fun(30) ;   // 調用外部類的方法
    }
};
輸出結果:
類中的屬性:hello world
方法中的參數:30

2、總結

內部類在實際的開發(fā)中非常有用處饵史,所以一定要熟悉其語法及其優(yōu)點满钟。
在Java系統(tǒng)中也會到處看到使用static聲明內部類的情況,一定要記住胳喷,使用static聲明的內部類湃番,是外部類,操作的時候要是用“外部類.內部類”的形式訪問吭露。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末吠撮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子讲竿,更是在濱河造成了極大的恐慌泥兰,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件题禀,死亡現場離奇詭異逾条,居然都是意外死亡,警方通過查閱死者的電腦和手機投剥,發(fā)現死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來担孔,“玉大人江锨,你說我怎么就攤上這事「馄” “怎么了啄育?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拌消。 經常有香客問我挑豌,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任氓英,我火速辦了婚禮侯勉,結果婚禮上,老公的妹妹穿的比我還像新娘铝阐。我一直安慰自己址貌,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布徘键。 她就那樣靜靜地躺著练对,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吹害。 梳的紋絲不亂的頭發(fā)上螟凭,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音它呀,去河邊找鬼螺男。 笑死,一個胖子當著我的面吹牛钟些,可吹牛的內容都是我干的烟号。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼政恍,長吁一口氣:“原來是場噩夢啊……” “哼汪拥!你這毒婦竟也來了?” 一聲冷哼從身側響起篙耗,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤迫筑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宗弯,有當地人在樹林里發(fā)現了一具尸體脯燃,經...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年蒙保,在試婚紗的時候發(fā)現自己被綠了辕棚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡邓厕,死狀恐怖逝嚎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情详恼,我是刑警寧澤补君,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站昧互,受9級特大地震影響挽铁,放射性物質發(fā)生泄漏伟桅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一叽掘、第九天 我趴在偏房一處隱蔽的房頂上張望楣铁。 院中可真熱鬧,春花似錦够掠、人聲如沸民褂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赊堪。三九已至,卻和暖如春竖哩,著一層夾襖步出監(jiān)牢的瞬間哭廉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工相叁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遵绰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓增淹,卻偏偏與公主長得像椿访,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虑润,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內容