精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java編程中的內部類

開發 后端
本文節選自《JAVA編程思想》中關于Java內部類的段落。內部類是在其他類內定義的類。雖然看上去象某種代碼隱藏機制,但可以實現更多功能。

內部類:在其它類內定義的類,不同于組合。雖然看上去象某種代碼隱藏機制,但可以實現更多功能 -了解包含它的類并可與之交換數據,而且內部類的代碼可以更優雅、清晰。

內部類定義:包含在其它類內。使用與非內部類沒有太大區別。

典型用法:outer class通過方法返回inner class的引用。

區別之一:內部類名嵌套在外部類(outer class)內,在Out class的non-static方法之外用OuterClassName.InnerClassName的形式定義內部類對象。

注意,非static內部類只能在Out class的non-static方法中生成對象;在其它類中,也必須使用Out class的外部類對象實例。這就保證了下面所說的鏈接問題。

區別之二:內部類可以為private和protected。

Inner Class只是一種名稱隱藏(name-hiding)和組織代碼方式?NO。

內部類對象有一個到創建它的外部類對象的鏈接(link to the enclosing object that made it),因而可以直接的、沒有任何限制地訪問該外部類對象的成員,而且內部類可以訪問outer class的所有成員(包括private)(C++的嵌套類沒有這個特性);而outer class訪問inner class的成員,必須創建Inner class的對象,可以訪問任何成員(包括private)。

內部類對象中隱式包含了一個外部類對象的引用。內部類對象構建需要outer class對象的引用,如果沒有,編譯報錯(非靜態inner class)。

.this和.new:前者用來返回Outer class引用,編譯期可知道和檢查正確類型,無運行時開銷;后者用來由outer class對象創建其內部類的對象,OutClassObject.new InnerClassName ()(注意,不能用outClassObj.new OutClassName.InnerClassName())。

嵌套類(nested class):static inner class,其對象創建不需要outer class對象引用,也可在static方法中創建。

內部類與upcasting

類實現了接口(interface),其它方法就可以用該interface作為參數,而不一定必須用該類(包括類對象定義)(類似繼承)。可以利用upcasting->interface。

upcasting內部類->基類或者接口(尤其是后者),使內部類有了用武之地。實現接口內部類可以完全不可見、不可用(通過private或protected),所獲得的只是基類或接口的引用(通過private,無法進行downcasting,protected,同一個包內,或者繼承類可以進行downcasting),方便隱藏實現細節。

接口成員自動為public

private內部類可以阻止任何依賴于類型的代碼,進行所有實現細節的隱藏。而且,擴展接口也沒有任何意義,因為無法訪問pubic接口之外的方法,這可以使JAVA產生更有效率的代碼 。

inner class可以在任意作用域內定義(如方法內)。

兩個理由:1. 實現一個接口

2. 需要一個不公開的類輔助解決復雜的問題

inner class形式

1. 方法內的內部類; 2. 方法中的一個作用域內的內部類; 3. 實現接口的匿名內部類; 4. 繼承的匿名內部類(基類含有參的構造器); 4. 進行成員初始化的匿名內部類; 5. 使用實例初始化塊進行構造的匿名內部類(匿名類沒有構造器)。

局部內部類(local inner class) :在方法內或方法的一個作用域中定義的內部類。局部內部類在域外不可見并不代表其對象也不可用。條件域內定義的內部類不代表它是條件創建的。

匿名內部類(anonymous inner class) :new T(){...}; {...}為匿名內部類的定義,";"不可少(;只是該語句的結束,而不是用來表示匿名內部類的結束,所以沒有什么特殊的地方),創建一個繼承自T的匿名類的對象,得到的引用可自動upcast to T。是前面定義內部類的一種簡寫,只是該類沒有名稱。

前面是基類構造器為默認構造器的情況,當基類構造器有參數時:new T(args){...};此時會調用基類相應構造器。

匿名內部類初始化 :當需要用到外部定義類的對象時,傳遞的引用參數必須為final,否則編譯報錯;匿名類不能有命名的構造器(當然不能,類本身就沒有名字),可以通過實例初始化(instance initialization)來完成構造器的功能。由于實例初始化不能重載(不代表只能有一個Instance initialization clause),所以匿名內部類只能有一個構造器。

匿名內部類只能在繼承類和實現接口中2選一,且只能實現一個接口。

prefer classes to interfaces. (寧愿選擇類,而不是接口?)

嵌套類(nested class):static inner class。有點類似C++嵌套類的概念,但Java的嵌套類可以訪問outer class的所有成員(包括private,當然只能通過外部類對象訪問non-static成員)。

1. 不需要通過outer class對象來創建嵌套類對象(.new不可用?);

2. 不能通過嵌套類對象訪問non-static outer class對象(意思是像非嵌套類那樣直接訪問);

3. 嵌套類對象中不包含outer class對象引用(.this不可用)。

4. 非嵌套內部類不能有static成員、方法和嵌套類(fields、methods級別必須與class本身一致,non-static不能含有static,non-static、static內可以含有non-static)。

嵌套類可以位于接口內部,不違反接口的規則(不能定義接口實例?),只代表把嵌套類位于接口的命名空間下,位于接口內部的類自動為public static(public嵌套類),而且嵌套類本身就可以實現該接口,好處在于可以在嵌套類內編寫該接口所有實現中都要用到的代碼。

嵌套類的另一個用途:編寫測試代碼。 為每個類編寫main函數增加代碼長度,可以把main放在嵌套類內,要測試該類運行該嵌套類即可;而在發布的時候只要在打包前簡單的刪除該嵌套類的.class文件即可。

多重嵌套的類(non-static和static)可以沒有限制的訪問任何外層類的所有對象。

為什么用內部類?

不是總是直接和接口打交道,有時候需要用的是接口的實現。(可以實現多個接口,但不能繼承多個類)

理由:每個內部類可以獨立繼承自一個實現,不受outer class是否已經繼承另一實現的限制。從效果上來說,inner class提供了多繼承(multiple-inheritance,繼承自多個類)的能力,提供了另一種實現多個接口的方法(相比多繼承,這個似乎沒那么重要,因為多繼承只能通過內部類來實現)。

額外特性:

1. 內部類可以有多個實例,每個實例可以擁有獨立于outer class對象的不同信息;

2. 一個outer class可以有多個內部類,每個內部類可以以不同的方式實現同一個接口或者繼承同一個類(參見習題22,兩個內部類不同方式實現同一個接口,只有內部類才能完成這些);

3. 內部類實例創建時間并不受到外部類對象創建的限制;

4. 用內部類不會制造"is-a"關系的混亂,每個內部類都是個實體。

閉包(closure)和回調(callback)

閉包是一種可調用的對象,它記錄了來自創建它的作用域的一些信息。

內部類是一種面向對象的閉包,不僅包含了外部類的信息,而且通過包含一個指向外部類對象的引用,可以操作所有成員,包括private。

回調,通過其它對象攜帶的信息,可以在稍后的某個時刻調用初始對象。

Java不支持指針類型,不能通過指針來實現回調。但內部類提供的閉包是種比較好的解決方案,更靈活,更安全(參見例callbacks)。

  1. private class Closure implements Incrementable {   
  2.     public void increment() {   
  3.     // Specify outer-class method, otherwise   
  4.     // you’d get an infinite recursion:   
  5.         Callee2.this.increment();   
  6.     }   
  7. }    

回調的價值在于靈活性,可以在運行時決定需要調用的方法。 GUI編程將體現得更明顯。

內部類與控制框架(control frameworks)

一個應用程序框架(application framework)是指一個用來解決一個特定類型問題的類或類的集合。典型的應用方法是,繼承其中一個或多個類,重寫某些方法。重寫方法的代碼將通用解決方案特殊化,來解決特定問題。例如模板函數模式。 設計模式將不變的和變化的事情分開。

控制框架是用來響應事件的一類特殊的應用程序框架 。主要用來響應事件的系統稱為事件驅動系統(event-driven system),如GUI。

內部類使得控制框架的創建和使用變得簡單 ??刂瓶蚣鼙旧聿话ㄒ刂频氖挛锏奶囟ㄐ畔?。這些信息在繼承過程中,由算法的action()部分實現時提供。控制框架中變化的事情是各種事件對象的不同action,這通過創建不同event繼承類來實現。(例event)

控制事件用abstract類代替接口?

內部類在控制框架中兩個作用:

1. 用來表示解決問題所需的各種不同的action()。

2. 內部類可以直接訪問外部類的所有成員,因而使得實現變得更靈活。

參見greenhouse(溫室)的例子。

內部類的繼承

內部類指向outer class object的引用必須初始化,而在它的繼承類中并不存在要聯接的缺省對象,必須使用特殊的語法明確指出這種關聯。

繼承自內部類的類構造器不能是默認構造器,要有個outer class的引用作為參數,而且必須加上enclosingClassReference.super();語句,編譯才能通過。

內部類能override?繼承outer class,像重寫方法一樣重寫內部類并不起作用,此時兩個內部類只是兩個獨立的實體??梢燥@式指定內部類的繼承關系,然后通過復寫base inner class的方法,來實現多態。 參見例BigEgg2.

  1. //: innerclasses/BigEgg2.java   
  2. // Proper inheritance of an inner class.   
  3. import static net.mindview.util.Print.*;   
  4. class Egg2 {   
  5.     protected class Yolk {   
  6.       public Yolk() { print("Egg2.Yolk()"); }   
  7.       public void f() { print("Egg2.Yolk.f()");}   
  8. }   
  9.     private Yolk y = new Yolk();   
  10.     public Egg2() { print("New Egg2()"); }   
  11.     public void insertYolk(Yolk yy) { y = yy; }   
  12.     public void g() { y.f(); }   
  13. }   
  14. public class BigEgg2 extends Egg2 {   
  15.     public class Yolk extends Egg2.Yolk {   
  16.         public Yolk() { print("BigEgg2.Yolk()"); }   
  17.         public void f() { print("BigEgg2.Yolk.f()"); }   
  18. }   
  19.     public BigEgg2() { insertYolk(new Yolk()); }   
  20.     public static void main(String[] args) {   
  21.         Egg2 e2 = new BigEgg2();   
  22.         e2.g();   
  23. }   
  24. /* Output:   
  25. Egg2.Yolk()   
  26. New Egg2()   
  27. Egg2.Yolk()   
  28. BigEgg2.Yolk()   
  29. BigEgg2.Yolk.f()   
  30. *///:~  
  31.  

局部內部類

局部內部類(local inner class)不能有訪問限定符;有訪問局部final變量和outer class所有類的權限;可以有命名的構造器;在方法外不能訪問。

絕大部分情況下,可以用匿名類來替代局部內部類,除非:

1. 需要命名的構造器,或者需要重載構造器

2. 需要多個內部類的對象

此時就要用Local Inner class。

【編輯推薦】

  1. Java的局部內部類以及final類型的參數和變量
  2. 沒有原生數據類型,Java會更好嗎?
  3. 20個開發人員非常有用的Java功能代碼
  4. 走進Java 7中的模塊系統
  5. 2009年十大Java技術解決方案
責任編輯:yangsai 來源: 《JAVA編程思想》
相關推薦

2020-01-15 11:14:21

Java算法排序

2011-07-21 15:44:33

Java內部類

2020-12-14 10:23:23

Java內部類外部類

2010-02-05 15:32:33

Java內部類

2011-03-29 14:11:15

內部類

2023-10-19 13:24:00

Java工具

2023-03-06 07:53:36

JavaN種內部類

2015-12-08 09:05:41

Java內部類

2009-07-29 09:18:49

Java內部類

2010-08-26 10:41:45

C#內部類

2019-12-23 14:32:38

Java內部類代碼

2020-09-21 07:00:42

Java內部類接口

2012-04-17 11:21:50

Java

2009-08-26 18:00:07

C#內部類

2020-01-12 19:10:30

Java程序員數據

2009-06-11 11:07:25

Java局部內部類Final類型

2020-10-29 08:31:15

Java同步回調編程語言

2011-11-23 10:59:18

Javafinal

2011-03-15 10:41:05

內部類

2009-07-22 16:13:40

iBATIS用法SqlMapTempl
點贊
收藏

51CTO技術棧公眾號

日韩激情视频在线播放| 亚洲午夜三级在线| 国产日产欧美精品| 欧美黄色免费看| 日韩av网址大全| 在线观看三级视频欧美| 国产日韩欧美大片| 日韩欧美亚洲系列| 经典三级在线一区| 国内免费精品永久在线视频| 99久久精品免费视频| 欧美二区观看| 欧美性三三影院| 香港三级日本三级a视频| 久青青在线观看视频国产| 狠狠色丁香久久婷婷综合_中 | 成人福利视频网| 国产一级做a爱免费视频| 精品国产一级毛片| 亚洲国产成人精品久久久国产成人一区 | 91九色单男在线观看| 国产精品国产三级国产专区52| 日本人体一区二区| 国产福利第一视频| 日韩黄色小视频| 久久人人97超碰精品888| 综合 欧美 亚洲日本| 男人的天堂久久| 91精品国产入口| 少妇一级淫免费放| 国模冰冰炮一区二区| 亚洲国产精品一区二区www在线| 色一情一乱一伦一区二区三区丨 | 精品va天堂亚洲国产| 麻豆三级在线观看| 欧美精品高清| 精品久久久久久中文字幕| 国产盗摄视频在线观看| 99riav在线| 久久久99精品久久| 九九99玖玖| 亚洲精品97久久中文字幕无码| 美女诱惑一区二区| 国产精品爱啪在线线免费观看| 日本系列第一页| 亚洲午夜精品久久久久久app| 久久九九亚洲综合| 超碰97av在线| 日韩国产一区| 中文字幕一区二区三区电影| 一出一进一爽一粗一大视频| 日韩欧美高清一区二区三区| 欧美日韩免费视频| 超碰超碰在线观看| 日本在线中文字幕一区二区三区| 色哟哟国产精品免费观看| 国产成人无码精品久久久性色| 高清电影在线免费观看| 亚洲国产wwwccc36天堂| 老太脱裤让老头玩ⅹxxxx| av人人综合网| 精品国产成人av| 欧美性大战久久久久xxx| 交100部在线观看| 精品国产乱码久久久久久天美 | 茄子视频成人在线观看 | 中文字幕亚洲综合久久| 色综合99久久久无码国产精品| 你懂的视频欧美| 亚洲色在线视频| 人妻互换一区二区激情偷拍| 中文精品电影| 性日韩欧美在线视频| a v视频在线观看| 日韩电影在线免费| 国产欧美日韩精品专区| 国产精品久久影视| 成人妖精视频yjsp地址| 久久久av水蜜桃| 成年人视频在线观看免费| 国产精品久久久久久久久久免费看 | 天天色天天操天天射| 99国产欧美另类久久久精品| 日本不卡一区二区三区视频| 美女羞羞视频在线观看| 亚洲精品国产精华液| 少妇高潮毛片色欲ava片| 人狥杂交一区欧美二区| 欧洲精品在线观看| 超级砰砰砰97免费观看最新一期| 91精品国产自产在线丝袜啪| 亚洲欧美999| 国产小视频你懂的| 亚洲二区免费| 国产精品美乳一区二区免费| www.久久久久久| 久久久美女艺术照精彩视频福利播放| 亚洲人成人77777线观看| 欧美色图天堂| 精品视频在线免费| yy6080午夜| 99久久99热这里只有精品| 97精品国产aⅴ7777| 在线观看视频二区| caoporn国产一区二区| 亚洲精品国产一区| 天堂√8在线中文| 91精品蜜臀在线一区尤物| 国产精品无码网站| 我不卡伦不卡影院| 琪琪第一精品导航| 丰满人妻一区二区三区无码av| 久久综合精品国产一区二区三区| 日本xxx免费| 免费在线观看一区| 亚洲精品电影久久久| avtt天堂在线| 美女视频网站黄色亚洲| 鲁鲁狠狠狠7777一区二区| www在线免费观看视频| 91精品91久久久中77777| 蜜臀视频在线观看| 亚洲精品va| 国产精品视频在线观看| 图片区 小说区 区 亚洲五月| 伊人一区二区三区| 91av视频免费观看| av一区二区高清| 日本成人激情视频| 亚洲色偷精品一区二区三区| 亚洲a一区二区| 久久久国产精品久久久| 天天精品视频| 国产日韩精品在线播放| 国产黄色在线播放| 色哟哟一区二区在线观看| 国产精品嫩草av| 亚洲午夜极品| 国产精品一区二区欧美黑人喷潮水| 国产精品扒开做爽爽爽的视频| 欧美视频自拍偷拍| 欧美人与禽zoz0善交| 日韩激情一二三区| 日韩欧美在线电影| 日韩不卡免费高清视频| 亚洲精品日韩欧美| 精人妻无码一区二区三区| 久久综合久久综合久久| avav在线看| 亚州精品视频| 国产91色在线播放| yw视频在线观看| 欧美日韩精品专区| 亚洲一级理论片| 精品一区二区三区免费观看| 一级特黄录像免费播放全99| 亚瑟国产精品| 久久国产精品久久国产精品| aaa一区二区三区| 亚洲一区二区三区四区五区黄| 性生交大片免费看l| 亚洲九九精品| 欧美一区视久久| 巨胸喷奶水www久久久免费动漫| 亚洲香蕉成人av网站在线观看| 国产精品欧美综合| 亚洲视频 欧洲视频| 精品人妻一区二区乱码| 在线欧美亚洲| 日本黄网免费一区二区精品| 久久精品国产福利| 九九精品视频在线| 欧美美女搞黄| 欧美麻豆精品久久久久久| 曰本女人与公拘交酡| 国产99久久久国产精品免费看| 日本欧美黄色片| 日韩av有码| 国产99在线免费| 欧美大片免费| 欧美成人午夜影院| 天堂成人在线| 制服丝袜亚洲色图| 国产成人无码精品久久久久| 久久久国产午夜精品| 91在线第一页| 亚洲一区二区三区四区五区午夜 | 国产二区在线播放| 欧美一区二区福利视频| 国产成人亚洲欧洲在线| 欧美经典一区二区| 成人区人妻精品一区二| 日韩1区2区日韩1区2区| 国产乱子伦精品视频| 最新精品国偷自产在线| 51国产成人精品午夜福中文下载| 原纱央莉成人av片| 久久99久久久久久久噜噜| 国产一二三区在线| 精品va天堂亚洲国产| 在线免费观看av片| 精品久久久久久久久国产字幕| 一级黄色片日本| 国产精品久久久久久人| 国产亚洲欧洲一区高清在线观看| 在线免费黄色网| 午夜一区在线| 丁香婷婷综合激情| 国产精品久久久久无码av| 欧美 日韩 国产在线| 免费一区二区三区在线视频| 国产成人精品优优av| 欧美人与牲禽动交com| 色偷偷偷综合中文字幕;dd| 天堂v在线观看| 欧美一区日韩一区| 亚洲性猛交富婆| 姬川优奈aav一区二区| 极品久久久久久| 国产欧美视频一区二区三区| 中国一级特黄录像播放 | 特黄特黄一级片| 日本vs亚洲vs韩国一区三区二区| 成人午夜免费在线| 欧美va天堂在线| 国产精品日韩一区二区三区| 美女精品久久| 亚洲va欧美va国产综合剧情| 成人免费黄色| 国产精品69久久| 最新中文字幕在线播放| 97国产精品人人爽人人做| 亚洲七七久久综合桃花剧情介绍| 这里只有视频精品| 成人在线视频成人| 国产亚洲欧美另类中文| 每日更新在线观看av| 精品一区二区三区电影| 欧洲精品毛片网站| 久操视频在线免费播放| 丝袜亚洲另类欧美重口| a√资源在线| 在线视频欧美日韩| 搞黄视频免费在线观看| 在线视频中文亚洲| 91在线视频免费看| 最新日韩中文字幕| 巨大荫蒂视频欧美大片| 久久精品国产久精国产思思| 香蕉视频在线播放| 欧美超级乱淫片喷水| h网站久久久| 色综合老司机第九色激情| 成人在线影视| 欧美日韩国产成人高清视频| 女人黄色免费在线观看| 国内精品久久影院| 中文字幕在线看片| 国产成一区二区| 久久av影院| 91精品啪在线观看麻豆免费| 日韩成人18| 国产伦精品一区二区三区视频孕妇 | 麻豆高清免费国产一区| caoporm在线视频| 东方欧美亚洲色图在线| 一级欧美一级日韩片| 国产亚洲一区二区三区在线观看| 欧美人与性囗牲恔配| 中文字幕亚洲综合久久菠萝蜜| 婷婷色中文字幕| 亚欧色一区w666天堂| 天天爽夜夜爽人人爽| 国产黄色网址在线观看| 伊人青青综合网| 老汉色影院首页| 99热成人精品热久久66| 欧美xxxxx精品| 九一在线视频| 亚洲人成电影网站色www| 在线观看黄色av| 欧美精品在线播放| 丝袜人妻一区二区三区| 国产jzjzjz丝袜老师水多 | 一区国产精品视频| jizz欧美激情18| caoporn97在线视频| 国产精品videossex久久发布| 精品三级在线观看| 亚洲中文无码av在线| 91精品国产综合久久精品| 国产综合视频在线| 国产亚洲一级高清| 1区2区在线观看| 国产成人精品在线播放| 国产亚洲高清在线观看| 久久久久久久久四区三区| 日韩精品四区| 3d动漫一区二区三区| 狠狠色狠狠色综合系列| 亚洲欧美在线不卡| 中文字幕综合网| 日日骚av一区二区| 精品欧美久久久| 1769在线观看| 欧美一区视频在线| 日韩精品久久久久久久软件91 | 欧美激情一区二区视频| 伊人情人综合网| 欧美丰满片xxx777| 亚洲精品国产精品乱码| 日韩在线欧美| 6080国产精品一区二区| 奴色虐av一区二区三区| 欧美成人性福生活免费看| 137大胆人体在线观看| 97国产一区二区精品久久呦| 亚洲色图图片| 日韩高清国产精品| 国产日韩欧美一区| wwwxxx色| 亚洲三级电影网站| 一级黄色免费看| 亚洲区在线播放| 综合毛片免费视频| 国产亚洲欧美一区二区| 亚洲国产日韩欧美在线| 一区二区免费av| 国产精品沙发午睡系列990531| 亚洲男人的天堂在线视频| 欧美成人免费网站| a视频在线观看免费| 国产剧情久久久久久| 欧美久久精品一级c片| 免费观看成人网| 91蝌蚪porny九色| 精品99在线观看| 欧美一区二区三区公司| 国产色在线观看| 92国产精品久久久久首页| 日韩一区二区三区免费播放| 国产91色在线观看| 国产人成一区二区三区影院| 日韩精品成人免费观看视频| 日韩精品欧美激情| 欧产日产国产精品视频| 国产精品swag| 伊人久久久大香线蕉综合直播 | yw.139尤物在线精品视频| 成人在线观看免费视频| 亚洲三区视频| 国产精品一区二区你懂的| 久久久久久久久毛片| 亚洲精品一区二区三区99 | 国产精品亚洲综合天堂夜夜| 久久亚洲专区| 九九九九九九九九| 亚洲最新视频在线播放| 日本免费网站在线观看| 欧美亚洲国产精品| 精品国产a一区二区三区v免费| 亚洲国产精品三区| 亚洲视频资源在线| 亚洲精品无码专区| 欧美亚洲国产视频| 欧美日韩一二| 国产资源中文字幕| 午夜精品福利久久久| 国产小视频在线观看| 91久久精品久久国产性色也91| 欧美三级视频| 蜜桃精品一区二区| 欧美精品日日鲁夜夜添| 午夜伦理在线视频| 欧美成ee人免费视频| 蜜桃在线一区二区三区| 青春草免费视频| 亚洲奶大毛多的老太婆| 亚瑟国产精品| 欧美亚洲国产成人| 亚洲欧洲av另类| 人妻少妇精品无码专区久久| 国产脚交av在线一区二区| 亚洲午夜精品一区 二区 三区| 手机免费看av片| 欧美三级中文字| 91在线三级| 在线观看一区二区三区三州| 成人妖精视频yjsp地址| 中文字幕视频在线播放| 欧美精品久久久久久久久久| 欧美理论电影大全| 稀缺小u女呦精品呦| 欧洲视频一区二区| 超清av在线| 在线综合视频网站| 久久综合久色欧美综合狠狠| 草逼视频免费看| 国产精品一区二区三区免费视频| 亚洲免费大片|