深入理解 JAVA 內部類 - 使用和分類

前言:對于 JAVA 基礎的內容,其實網上資料挺多的临庇,本打算只寫 Android 相關技術文章反璃,但對于內部類這個基礎點昵慌,在春招的準備過程中,發(fā)現(xiàn)里面有些門道而且很少人深入研究淮蜈,特此貢獻給大家

深入理解 JAVA 內部類系列文章如下:

本文主要討論是內部類的使用和分類

閱讀本文大概需要 7 分鐘斋攀,大家耐心點看下去,會有不一樣的收獲哈~

為什么使用內部類?(訪問內部數(shù)據(jù)梧田,更好封裝淳蔼,使用組合替代多重繼承,回調調用)

  1. 一個內部類的對象能夠訪問創(chuàng)建它的對象的實現(xiàn)裁眯,包括私有數(shù)據(jù)鹉梨。
  2. 對于同一個包中的其他類來說,內部類能夠隱藏起來穿稳,提供了更好的封裝存皂。
  3. 它能夠通過組合非常好的解決多重繼承的問題, 因為它就是一個獨立的實體
  4. 匿名內部類可以很方便的定義回調。
共同特點:
  1. 外部類是不能直接使用非靜態(tài)內部類的成員和方法的逢艘,可先創(chuàng)建非靜態(tài)內部類的對象旦袋,然后通過非靜態(tài)內部類的對象來訪問其成員變量和方法;
  2. 內部類中定義的方法可以直接訪問外部類中的數(shù)據(jù),而不受訪問控制符的影響它改,如直接訪問外部類中的私有屬性
  3. 如果外部類和內部類具有相同的成員變量或方法疤孕,內部類默認訪問自己的成員變量或方法,如果要訪問外部類的成員變量搔课,可以使用 this 關鍵字胰柑,如:Outer.this.name
  4. 編譯后,會發(fā)現(xiàn)產生了兩個 .class 文件: Outer.classOuter$Inner.class
  5. 除了靜態(tài)內部類爬泥,其他內部類中不能存在任何 static 的變量和方法柬讨,但都可以定義常量:
    1. 因為非靜態(tài)內部類是要依賴于外部類的實例,而靜態(tài)變量和方法是不依賴于對象袍啡,僅與類相關踩官,所以會矛盾了。簡而言之: 非靜態(tài)內部類的作用域是實例級別的境输,此時在非靜態(tài)內部類中定義靜態(tài)域或方法蔗牡,作用域是類級別的,所以互相矛盾嗅剖,其實這種情況編譯是不能通過的
    2. 常量是在編譯器就確定的辩越,放到所謂的常量池了

內部類分類

(一).成員內部類:

語法:內部類 對象名 = 外部類對象引用.new 內部類();

  1. 成員內部類定義在外部類的內部,相當于外部類的一個成員變量的位置信粮,成員內部類可以使用任意訪問控制符黔攒,如 public、protected、private 等
  2. 定義了成員內部類后督惰,必須使用外部類對象來創(chuàng)建內部類對象不傅,而不能直接去 new 一個內部類對象,即:內部類 對象名 = 外部類對象引用.new 內部類();

(二).靜態(tài)內部類: 是 static 修飾的內部類

語法:內部類 對象名 = new 內部類();

  1. 靜態(tài)內部類不能直接訪問外部類的非靜態(tài)成員赏胚,但可以通過 new 外部類().成員 的方式訪問
  2. 如果外部類的靜態(tài)成員與內部類的成員名稱相同访娶,可通過 類名.靜態(tài)成員 訪問外部類的靜態(tài)成員;如果外部類的靜態(tài)成員與內部類的成員名稱不相同觉阅,則可通過 成員名 直接調用外部類的靜態(tài)成員
  3. 創(chuàng)建靜態(tài)內部類的對象時崖疤,不需要外部類的對象,可以直接創(chuàng)建 內部類 對象名 = new 內部類();

(三).方法局部內部類: 訪問僅限于方法作用域內

語法:內部類 對象名 = new 內部類();

  1. 必須在同一個方法作用域內完成定義類和創(chuàng)建對象
  2. 局部內部類就像是方法里面的一個局部變量一樣留拾,是不能有 public戳晌、protected、private 以及 static 權限修飾符

(四).匿名內部類: 直接使用 new 來生成一個對象的引用

語法:略//是通過繼承一個類或者實現(xiàn)一個接口創(chuàng)建對象痴柔,必須實現(xiàn)所有抽象方法

  1. 匿名內部類肯定是局部內部類 (因為是在一個方法里面完成的),因為在 java 中疫向,語句必須寫在方法里咳蔚,而匿名內部類其實就是一條特殊的語句
  2. 對于匿名內部類的使用它是存在一個缺陷的,就是它僅能被使用一次搔驼,創(chuàng)建匿名內部類時它會立即創(chuàng)建一個該類的實例谈火,該類的定義會立即消失,所以匿名內部類是不能夠被重復使用;
  3. 使用匿名內部類時舌涨,我們必須是繼承一個類或者實現(xiàn)一個接口糯耍,但是兩者不可兼得,只能繼承一個類或者實現(xiàn)一個接口
  4. 匿名內部類中不能存在任何的靜態(tài)成員變量和靜態(tài)方法囊嘉,匿名內部類不能是抽象的温技,它必須要實現(xiàn)繼承的類或者實現(xiàn)的接口的所有抽象方法
  5. 匿名內部類中是不能定義構造函數(shù)的,匿名內部類中不能存在任何的靜態(tài)成員變量和靜態(tài)方法
  6. 匿名內部類初始化:可使用構造代碼塊!!! 利用構造代碼塊能夠達到為匿名內部類創(chuàng)建一個構造器的效果

閱讀到最后不知道大家花了多少時間扭粱,但這個文章的數(shù)字大概需要閱讀 3.5 分鐘哈舵鳞,但理解可能會花費就會比較耗時了,但希望大概能對內部類有個深刻的理解

點擊 深入理解 JAVA 內部類 內部類的 final 問題琢蛤,即可進入下一個內容蜓堕,了解為什么內部類使用到的一些變量會經常使用到 final 修飾符

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市博其,隨后出現(xiàn)的幾起案子套才,更是在濱河造成了極大的恐慌,老刑警劉巖慕淡,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件背伴,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機挂据,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門以清,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崎逃,你說我怎么就攤上這事掷倔。” “怎么了个绍?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵勒葱,是天一觀的道長。 經常有香客問我巴柿,道長凛虽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任广恢,我火速辦了婚禮凯旋,結果婚禮上,老公的妹妹穿的比我還像新娘钉迷。我一直安慰自己至非,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布糠聪。 她就那樣靜靜地躺著荒椭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舰蟆。 梳的紋絲不亂的頭發(fā)上趣惠,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音身害,去河邊找鬼味悄。 笑死,一個胖子當著我的面吹牛题造,可吹牛的內容都是我干的傍菇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼界赔,長吁一口氣:“原來是場噩夢啊……” “哼丢习!你這毒婦竟也來了?” 一聲冷哼從身側響起淮悼,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤咐低,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后袜腥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體见擦,經...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡钉汗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲤屡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片损痰。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖酒来,靈堂內的尸體忽然破棺而出卢未,到底是詐尸還是另有隱情,我是刑警寧澤堰汉,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布辽社,位于F島的核電站,受9級特大地震影響翘鸭,放射性物質發(fā)生泄漏滴铅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一就乓、第九天 我趴在偏房一處隱蔽的房頂上張望汉匙。 院中可真熱鬧,春花似錦档址、人聲如沸盹兢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浦妄,卻和暖如春尼摹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剂娄。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工蠢涝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阅懦。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓和二,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耳胎。 傳聞我的和親對象是個殘疾皇子惯吕,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • Java 內部類 分四種:成員內部類、局部內部類怕午、靜態(tài)內部類和匿名內部類废登。 1、成員內部類: 即作為外部類的一個成...
    ikaroskun閱讀 1,219評論 0 13
  • 1. Java基礎部分 基礎部分的順序:基本語法郁惜,類相關的語法堡距,內部類的語法,繼承相關的語法,異常的語法羽戒,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 一:java概述:1缤沦,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境易稠,java的開發(fā)工...
    ZaneInTheSun閱讀 2,629評論 0 11
  • 文/郭同學啊 2016年缸废,一月 寫日記的習慣大概是從小學開始的吧,具體時間已經記不清了缩多。那時在老師的嚴格要求之下呆奕,...
    郭同學啊閱讀 310評論 2 0
  • 不小心手扭傷了,好久沒畫了
    冰糖橘子水兒閱讀 296評論 8 2