久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

瀏覽:44日期:2022-08-24 17:31:08

簡(jiǎn)介

一般來(lái)說(shuō),我們創(chuàng)建類和接口的時(shí)候都是一個(gè)類一個(gè)文件,一個(gè)接口一個(gè)文件,但有時(shí)候?yàn)榱朔奖慊蛘吣承┨厥獾脑颍琷ava并不介意在一個(gè)文件中寫多個(gè)類和多個(gè)接口,這就有了我們今天要講的內(nèi)部類和內(nèi)部接口。

內(nèi)部類

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

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

我們?cè)赾lass內(nèi)部定義一個(gè)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(); }}

因?yàn)閟tatic變量可以直接根據(jù)類名來(lái)存取,所以我們使用new StaticInnerClass.Inner()來(lái)實(shí)例化內(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(); }}

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

注意這里我們需要使用到兩個(gè)new。

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

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

@Slf4jpublic 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(); }}

方法中的類,我們是無(wú)法在外部實(shí)例化的。

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

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

@Slf4jpublic 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(); }}

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

匿名類

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

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<K, V> { interface Entry<K, V> { K getKey(); }

這里的內(nèi)部接口一定是static的,因?yàn)榻涌谑遣荒軐?shí)例化的,所以為了訪問(wèn)到接口中的接口,必須定義為static。如果不指定,則默認(rèn)就是static。

我們看一個(gè)該內(nèi)部接口的實(shí)現(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é)

本文講解了5個(gè)內(nèi)部類的實(shí)現(xiàn)和一個(gè)內(nèi)部接口的應(yīng)用。大家只要把內(nèi)部的類或者接口看成一個(gè)變量,就可以很好的理解上面的內(nèi)容了。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

補(bǔ)充知識(shí):內(nèi)部類(成員內(nèi)部類、靜態(tài)內(nèi)部類、方法內(nèi)部類)

一:成員內(nèi)部類:

最常見的內(nèi)部類就是成員內(nèi)部類,也稱作普通內(nèi)部類;

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

1、Inner類定義在Outer類的內(nèi)部,相當(dāng)于Outer類的成員變量的位置,Inner類可以使用任意訪問(wèn)修飾符,如:public、private、protected等。

2、Inner類中定義的test()方法可以訪問(wèn)Outer類中的數(shù)據(jù),不受訪問(wèn)控制符的影響。

3、 定義了成員內(nèi)部類后,必須使用外部類對(duì)象來(lái)創(chuàng)建內(nèi)部類對(duì)象,而不能直接去 new 一個(gè)內(nèi)部類對(duì)象,即:內(nèi)部類 對(duì)象名 = 外部類對(duì)象.new 內(nèi)部類( );如創(chuàng)建Inner的內(nèi)部類對(duì)象:要先創(chuàng)建外部類對(duì)象:Outer o = new outer(); 創(chuàng)建內(nèi)部類:Inner i = o.new Inner();訪問(wèn)Inner中的test()方法:i.test();

例如:

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

4、如果外部類和內(nèi)部類具有相同的成員變量或方法,內(nèi)部類可以直接訪問(wèn)內(nèi)部類的成員變量或方法,但如果內(nèi)部類訪問(wèn)外部類的成員變量或者方法時(shí),需要使用this關(guān)鍵字;如下:

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

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

靜態(tài)內(nèi)部類就是用static修飾的內(nèi)部類,這種內(nèi)部類的特點(diǎn)是:

1、靜態(tài)內(nèi)部類不能直接訪問(wèn)外部類的非靜態(tài)成員,但,可以通過(guò)new 外部類().成員的方式訪問(wèn);

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

2、如果外部類的靜態(tài)成員與內(nèi)部類的靜態(tài)成員相同, 可以通過(guò)'類名.靜態(tài)成員'來(lái)訪問(wèn)外部類的靜態(tài)成員;如果不同,可以直接調(diào)用外部類的靜態(tài)成員名。

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

3、創(chuàng)建靜態(tài)內(nèi)部類的對(duì)象時(shí),不需要外部類的對(duì)象,可以直接創(chuàng)建;

三:方法內(nèi)部類:

1、方法內(nèi)部類就是定義在外部類的方法中,方法內(nèi)部類只在該方法內(nèi)可以用;

java中的內(nèi)部類內(nèi)部接口用法說(shuō)明

2、由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問(wèn)控制符和 static 修飾符。

以上這篇java中的內(nèi)部類內(nèi)部接口用法說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产一区日韩欧美 | 成人免费一区二区三区视频软件 | 成版人性视频 | 黄篇网址| 伊人网站 | 久久视频一区二区 | 欧美精品三区 | 日韩和的一区二区 | 欧美日韩亚洲一区二区 | 日韩欧美一二三区 | 亚洲精品国产第一综合99久久 | 国产片淫级awww | 久久国产精品久久久久久 | 久久夜夜| 久久精品国产99国产 | 久在线视频 | 成人av一区二区三区 | 韩日精品视频 | 成人性视频在线播放 | 亚洲成人一区二区三区 | 毛片站 | 91在线观看视频 | 人人射人人干 | 自拍偷拍专区 | 91精品国产自产精品男人的天堂 | 久久精品美女 | 成人一级| 日本一级中文字幕久久久久久 | 午夜寂寞影视在线观看 | 少妇无套高潮一二三区 | 在线观看欧美一区 | 国产一区二区三区高清 | 国产区在线观看 | 精品一区二区三区四区视频 | 色婷婷综合久色 | 在线观看亚洲 | 精品精品 | 欧美在线激情 | 久久精品色欧美aⅴ一区二区 | 国产精品久久国产精品 | 欧美日韩在线免费观看 |