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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解內(nèi)部類和內(nèi)部接口

詳解內(nèi)部類和內(nèi)部接口

更新時(shí)間:2020-10-20 17:57:39 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1090次

一般情況下,我們創(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)部類。


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

我們?cè)赾lass內(nèi)部定義一個(gè)static的class,如下所示:

@Slf4j

public 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ù)類名來存取,所以我們使用new StaticInnerClass.Inner()來實(shí)例化內(nèi)部類。


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

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

@Slf4j

public 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();

}

}

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

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


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

我們可以在靜態(tài)方法中定義一個(gè)類,這個(gè)類其實(shí)就相當(dāng)于方法中的變量,這個(gè)變量當(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();

}

}

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


4.非靜態(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();

}

}


5.匿名類

最后一個(gè),匿名類,直接在需要的時(shí)候?qū)嵗念悺D涿愇覀冇龅搅撕芏啻瘟耍热缭跇?gòu)建SortedSet的時(shí)候,可以傳入自定義的Comparator,我們可以用匿名類來實(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{

interface Entry{

K getKey();

}

這里的內(nèi)部接口一定是static的,因?yàn)榻涌谑遣荒軐?shí)例化的,所以為了訪問到接口中的接口,必須定義為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;

}

}


總的來說,內(nèi)部類和內(nèi)部接口其實(shí)可以看成一個(gè)變量,這樣代入進(jìn)去方便我們理解。對(duì)于內(nèi)部類和內(nèi)部接口,在本站的Java基礎(chǔ)教程中有更加詳細(xì)的講解,歡迎小伙伴們前來觀看學(xué)習(xí)。


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

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 免费a级在线观看完整片 | 亚洲国产综合久久精品 | 欧美高清激情毛片 | 奇米在线影视 | 在线播放精品 | 涩涩视频在线观看 | 欧美在线观看一区二区 | 色噜噜狠狠狠狠色综合久一 | 青草草在线观看 | 久久刺激 | 狠狠色噜噜综合社区 | 国产午夜爽爽窝窝在线观看 | 欧美日韩亚洲另类 | 久草在线最新视频 | 又黄又爽又成人免费视频 | 成人午夜亚洲影视在线观看 | 一区二区三区不卡在线 | 国产全黄a一级毛片视频 | 奇米4色| japanese乱子欧美 | 国产理论精品 | 视频黄色在线 | 国产 高清 在线 | 特级毛片免费视频 | 最新国产精品亚洲 | 久久久久夜 | 亚洲 自拍 另类 制服在线 | 婷婷中文网 | 欧美成人久久一级c片免费 欧美成人剧情中文字幕 | 欧美一级毛片高清免费观看 | 成人国产精品一级毛片天堂 | 在线看亚洲 | 在线播放免费一级毛片欧美 | 久久久一区二区三区 | 一级毛片免费的 | 国产成人精品一区二三区 | 久久精品欧美日韩精品 | 中文字幕1区2区 | 国内主播大秀福利视频在线看 | 激情午夜婷婷 | 最新久久免费视频 |