av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

淺談Java面向?qū)ο笾畠?nèi)部類

瀏覽:6日期:2022-08-10 15:07:05
目錄內(nèi)部類訪問外部對象訪問內(nèi)部對象局部內(nèi)部類匿名內(nèi)部類靜態(tài)內(nèi)部類內(nèi)部類

內(nèi)部類是定義在另一個(gè)類中的類,例如 TalkingClock 類中內(nèi)嵌了 TimePrinter 類:

class TalkingClock{ private int interval; private boolean beep; public TalkingClock(int interval, boolean beep){} public void start(){} public class TimePrinter implements ActionListener{ public void actionPerformed(ActionEvent event){} }}

內(nèi)部類可以對同一個(gè)包中的其他類隱藏細(xì)節(jié),同時(shí)內(nèi)部類中的方法可以訪問原來的類中的作用域數(shù)據(jù)。

訪問外部對象

內(nèi)部類可以訪問自身的數(shù)據(jù)字段,也可以訪問創(chuàng)建它的外圍類對象的數(shù)據(jù)字段。內(nèi)部類會(huì)有一個(gè)隱式引用,指向創(chuàng)建它的外部類對象。

淺談Java面向?qū)ο笾畠?nèi)部類

對外圍類的引用在構(gòu)造器中設(shè)置,編譯器會(huì)修改所有內(nèi)部類的構(gòu)造器,添加一個(gè)對外部類引用的參數(shù)。使用外部類引用的語法為:

OuterClass.this

例如內(nèi)部類 TimePrinter 引用外部類 TalkingClock 的 beep 參數(shù),嚴(yán)格來說要寫成這樣。

TalkingClock.this.beep訪問內(nèi)部對象

使用內(nèi)部類的構(gòu)造器時(shí),可以使用下面的語法來實(shí)現(xiàn):

outerObject.new InnerClass(construction parameters)

在外部類的作用域之外,想要引用內(nèi)部類就需要用下面的語法:

OuterClass.InnerClass局部內(nèi)部類

局部內(nèi)部類類似方法的局部變量,在類外或者類的其他方法中不能訪問這個(gè)內(nèi)部類。通常情況下可以在某個(gè)方法中局部實(shí)現(xiàn)一個(gè)類,這個(gè)類將用于輔助該方法的功能實(shí)現(xiàn)。例如:

public void start(){ class TimePrinter implements ActionListener{ public void actionPerformed(ActionEvent event){ System.out.println('The time is ' + Instant.ofEpochMilli(event.getWhen())); if (beep) {Toolkit.getDefaultToolkit().beep(); } } } TimePrinter listener = new TimePrinter(); TalkingClock timer = new Timer(interval, listener); timer.start();}

聲明局部類時(shí)不能有訪問說明符,局部類的作用域被限定在了這個(gè)局部類塊中。局部類可以做到對外界的絕對隱藏,這是個(gè)很大的優(yōu)勢。局部類還有個(gè)優(yōu)點(diǎn),就是可以訪問局部變量。當(dāng)局部變量傳參進(jìn)來時(shí),局部變量也會(huì)被傳入構(gòu)造器,此時(shí)編譯器會(huì)為局部變量提供相應(yīng)的實(shí)例字段,保存一個(gè)副本。這么做的好處是,當(dāng)函數(shù)調(diào)用結(jié)束導(dǎo)致局部變量消失時(shí),局部類還能夠使用這個(gè)局部變量。例如將上述的 start 方法改為傳入 2 個(gè)參數(shù),仍然不影響正常使用。

public void start(int interval, boolean beep)匿名內(nèi)部類

使用局部類時(shí),如果只是想建立這個(gè)局部類的一個(gè)對象,甚至不需要給出這個(gè)類的名字,這種類就成為匿名內(nèi)部類。匿名內(nèi)部類的語法為:

new SuperType(construction parameters){ inner class methods and data} new InterfaceType(){ methods and data}

SuperType 指的是超類,此時(shí)局部類就需要拓展這個(gè)類。匿名局部類可以基于接口創(chuàng)建,此時(shí)局部類就要實(shí)現(xiàn)這個(gè)接口。由于構(gòu)造器的名字必須和類名相同,而匿名局部類沒有類名,因此匿名局部類不能有構(gòu)造器,此時(shí)如果要構(gòu)造參數(shù)就需要傳遞給超類的構(gòu)造器。例如將上述的局部類改造成匿名內(nèi)部類:

public void start(){ var listener = new ActionListener(){ public void actionPerformed(ActionEvent event){ System.out.println('The time is ' + Instant.ofEpochMilli(event.getWhen())); if (beep) {Toolkit.getDefaultToolkit().beep(); } } } TalkingClock timer = new Timer(interval, listener); timer.start();} 靜態(tài)內(nèi)部類

有時(shí)候使用內(nèi)部類只是想隱藏一個(gè)類,并不需要內(nèi)部類有外部類的引用,因此可以用 static 關(guān)鍵字聲明靜態(tài)內(nèi)部類。例如定義 ArrayAlg 類中實(shí)現(xiàn) minmax 方法,minmax 方法的功能是同時(shí)返回一個(gè)數(shù)組的最大值和最小值,但是用 return 只能返回一個(gè)值。因此可以定義一個(gè)靜態(tài)內(nèi)部類 Pair,Pair 類有兩個(gè)參數(shù)可以分別存儲(chǔ)最大和最小值,這樣就可以通過返回 Pair 方法同時(shí)返回 2 個(gè)值了。

class ArrayAlg{ public static class Pair{ private double first; private double second; public Pair(double f, double s){ first = f; second = s; } public double getFirst() { return first; } public double getSecond() { return second; } } public static Pair minmax(double[] values){ double min = Double.POSITIVE_INFINITY; double max = Double.NEGATIVE_INFINITY; for (double v : values){ if (min > v) min = v; if (max < v) max = v; } return new Pair(min, max); }}

只要內(nèi)部類不需要訪問外圍類對象,就應(yīng)該聲明為靜態(tài)內(nèi)部類。和其他內(nèi)部類不同,靜態(tài)內(nèi)部類可以有靜態(tài)字段和方法。

以上就是淺談Java面向?qū)ο笾畠?nèi)部類的詳細(xì)內(nèi)容,更多關(guān)于Java面向?qū)ο髢?nèi)部類的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 俺去俺来也www色官网cms | 天天操天天天干 | 国产精品毛片一区二区在线看 | 综合二区 | 91在线精品秘密一区二区 | 欧美日韩亚洲视频 | 新疆少妇videos高潮 | 激情欧美日韩一区二区 | 91精品国产91久久久久久密臀 | 国产精品18毛片一区二区 | 国产精品海角社区在线观看 | 欧洲性生活视频 | 精品视频一二区 | 不卡在线一区 | 欧美成人精品激情在线观看 | www.久久久久久久久久久 | 免费福利视频一区二区三区 | 啪啪免费网 | 午夜精品久久久久久久久久久久久 | 91久久久久久久久久久久久 | 欧美一区二区三区 | 久久国产精品一区二区 | 欧美在线视频不卡 | 一区二区中文字幕 | 亚洲综合色 | 日产精品久久久一区二区福利 | 日韩精品在线观看免费 | 亚洲视频免费在线观看 | 日本一二三区高清 | 天天艹| 欧美三级免费观看 | 久久久久国产精品午夜一区 | 男女啪啪网址 | 国产综合一区二区 | 久久精品一区二区三区四区 | 日本精品一区二区三区视频 | 91视频官网 | 国产片一区二区三区 | 色婷婷一区二区三区四区 | 亚洲二区视频 | 亚洲欧美精品在线 |