大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java中的內(nèi)部類內(nèi)部接口詳解

Java中的內(nèi)部類內(nèi)部接口詳解

更新時間:2020-08-13 16:47:22 來源:動力節(jié)點 瀏覽1948次

一般來說,我們創(chuàng)建類和接口的時候都是一個類一個文件,一個接口一個文件,但有時候為了方便或者某些特殊的原因,java并不介意在一個文件中寫多個類和多個接口,這就有了我們今天要講的內(nèi)部類和內(nèi)部接口。

Java內(nèi)部類

先講內(nèi)部類,內(nèi)部類就是在類中定義的類。類中的類可以看做是類的一個屬性,一個屬性可以是static也可以是非static的。而內(nèi)部類也可以定義在類的方法中,再加上匿名類,總共有5種內(nèi)部類。

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

我們在class內(nèi)部定義一個static的class,如下所示:

@Slf4jpublic?class?StaticInnerClass?{????static?class?Inner?{????????void?print()?{
????????????log.info("Inner?class?is:?"?+?this);
????????}
????}????public?static?void?main(String[]?args)?{
????????StaticInnerClass.Inner?inner?=?new?StaticInnerClass.Inner();
????????inner.print();
????}
}

因為static變量可以直接根據(jù)類名來存取,所以我們使用new StaticInnerClass.Inner()來實例化內(nèi)部類。

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

class中定義的類也可以是非靜態(tài)的,如下所示:

@Slf4jpublic?class?InnerClass?{?????class?Inner?{????????void?print()?{
????????????log.info("Inner?class?is:?"?+?this);
????????}
????}????public?static?void?main(String[]?args)?{
????????InnerClass.Inner?inner?=?new?InnerClass().new?Inner();
????????inner.print();
????}
}

要訪問到類的變量,需要實例化外部內(nèi),然后再實例化內(nèi)部類:new InnerClass().new Inner()。

注意這里我們需要使用到兩個new。

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

我們可以在靜態(tài)方法中定義一個類,這個類其實就相當(dāng)于方法中的變量,這個變量當(dāng)然不能是static的。我們看下面的例子:

@Slf4j
public?class?StaticMethodInnerClass?{
????private?static?String?x?=?"static?x";
????public?static?void?print()?{
????????class?MyInner?{
????????????public?void?printOuter()?{
????????????????log.info("x?is?"?+?x);
????????????}
????????}
????????MyInner?i?=?new?MyInner();
????????i.printOuter();
????}
????public?static?void?main(String[]?args)?{
????????StaticMethodInnerClass.print();
???}
}

方法中的類,我們是無法在外部實例化的。

非靜態(tài)方法的內(nèi)部類

同樣的非靜態(tài)方法也可以定義內(nèi)部類:

@Slf4j
public?class?MethodInnerClass?{
????private??String?x?=?"non?static?x";
????public??void?print()?{
????????class?MyInner?{
????????????public?void?printOuter()?{
????????????????log.info("x?is?"?+?x);
????????????}
????????}
????????MyInner?i?=?new?MyInner();
????????i.printOuter();
????}
????public?static?void?main(String[]?args)?{
????????new?MethodInnerClass().print();
????}
}

注意,這里需要先實例化外部類才可以繼續(xù)調(diào)用。

匿名類

最后一個,匿名類,直接在需要的時候?qū)嵗念悺D涿愇覀冇龅搅撕芏啻瘟耍热缭跇?gòu)建SortedSet的時候,可以傳入自定義的Comparator,我們可以用匿名類來實現(xiàn),也可以直接使用lambda表達式

public?class?AnonymousClass?{
????public?static?void?main(String[]?args)?{
????????SortedSet?sortedSet1?=?new?ConcurrentSkipListSet(new?Comparator(){
????????????@Override
????????????public?int?compare(Object?o1,?Object?o2)?{
????????????????return?0;
????????????}
????????});

????????SortedSet?sortedSet2?=?new?ConcurrentSkipListSet((o1,?o2)?->?0);
????}
}

內(nèi)部接口

Inner Interface是指在接口中定義的接口。最常見的就是Map中的Entry了:

public?interface?Map?{
????interface?Entry?{
????????K?getKey();
????}

這里的內(nèi)部接口一定是static的,因為接口是不能實例化的,所以為了訪問到接口中的接口,必須定義為static。如果不指定,則默認就是static。

我們看一個該內(nèi)部接口的實現(xiàn):

public?class?MapImpl?implements?Map.Entry{
????@Override
????public?Object?getKey()?{
????????return?0;
????}
????@Override
????public?Object?getValue()?{
????????return?null;
????}
????@Override
????public?Object?setValue(Object?value)?{
????????return?null;
????}
}

以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“Java中的內(nèi)部類內(nèi)部接口詳解”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日韩免费一级毛片欧美一级日韩片 | 久久国产精品老人性 | 日韩视频一区 | 成年女人毛片免费观看中文w | 成人看的午夜免费毛片 | 国产精品免费看久久久麻豆 | 欧美日韩国产一区二区三区播放 | 香蕉超级碰碰碰97视频蜜芽 | 97精品国产自在现线免费 | 欧美亚洲国产一区二区三区 | 夜夜爱夜夜操 | 九九精品国产兔费观看久久 | 深夜在线 | 午夜欧美精品久久久久久久 | 天天拍夜夜添久久精品免费 | 久久久久久久影院 | 成人国产精品视频 | 四虎影视入口 | 国产成人禁片免费观看视频 | 国产日韩精品欧美一区色 | 成人国内精品久久久久影 | 成 人 黄 色 免费网 | 国产精品视频分类一区 | 天天干视频网站 | 亚洲黄色免费在线观看 | 亚洲日本va中文字幕区 | 一级一级女人18毛片 | 擼擼色在线看观看免费 | 久热这里只精品99re8久 | 在线观看中文字幕一区 | 四虎在线播放 | 有码中文字幕在线观看 | 国内精品福利 | 狠狠色噜狠狠狠狠 | 色综合一本到久久亚洲91 | 色偷偷亚洲女性天堂 | 美女被a到爽视频在线观看 美女被cao的视频免费看 | 日本一区二区三区在线 观看网站 | 欧美香蕉网 | 亚洲人人爱 | 久久精品蜜芽亚洲国产a |