电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

內(nèi)部類是定義在另一個類中的類,例如 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)部類可以對同一個包中的其他類隱藏細(xì)節(jié),同時內(nèi)部類中的方法可以訪問原來的類中的作用域數(shù)據(jù)。

訪問外部對象

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

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

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

OuterClass.this

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

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

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

outerObject.new InnerClass(construction parameters)

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

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

局部內(nèi)部類類似方法的局部變量,在類外或者類的其他方法中不能訪問這個內(nèi)部類。通常情況下可以在某個方法中局部實現(xiàn)一個類,這個類將用于輔助該方法的功能實現(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();}

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

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

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

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

SuperType 指的是超類,此時局部類就需要拓展這個類。匿名局部類可以基于接口創(chuàng)建,此時局部類就要實現(xiàn)這個接口。由于構(gòu)造器的名字必須和類名相同,而匿名局部類沒有類名,因此匿名局部類不能有構(gòu)造器,此時如果要構(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)部類

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

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)文章:
主站蜘蛛池模板: 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 | 动物麻醉机-数显脑立体定位仪-北京易则佳科技有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 工业CT-无锡璟能智能仪器有限公司| 聚合氯化铝厂家-聚合氯化铝铁价格-河南洁康环保科技 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 流量卡中心-流量卡套餐查询系统_移动电信联通流量卡套餐大全 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 范秘书_懂你的范文小秘书 | 桐城新闻网—桐城市融媒体中心主办| 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 |