亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

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

oop - Java中,關(guān)于匿名內(nèi)部類調(diào)用外部類方法的疑惑

瀏覽:98日期:2023-11-29 13:08:58

問題描述

今天學(xué)習(xí)了內(nèi)部類的知識,知道內(nèi)部類是可以持有外部類的this,從而在內(nèi)部類中可以使用OuterClass.this.medthod()來引用相應(yīng)外部類方法。但是我寫出下代碼,可以運行,然而其中的調(diào)用邏輯我不是很明白,望賜教!

public class test {public void report(){ System.out.println('I’m invoked!');}public void perform(){ new Speaker().handleAction(new Action(){@Overridepublic void action() { report();//???為什么能調(diào)用report??} });}public static void main(String[] args) { new test().perform();//測試代碼} } class Speaker{void handleAction(Action act){ act.action();} } interface Action{void action(); }

其中設(shè)計是這樣的,test對象調(diào)用perform方法,該方法其中新建一個Speaker匿名類對象,該對象調(diào)用了其handleAction方法,該方法的參數(shù)是一個Action接口,接口需要重寫action抽象方法。我使用了屬于test的report方法。輸出是正常的。

那么我想知道,test對象的方法中有一個匿名類的局部對象,局部對象參數(shù)是一個實現(xiàn)接口的匿名類,為什么在這個匿名類中可以調(diào)用report?它持有test.this指針嗎?我理解中,new Speaker().handleAction(new Action(){....這里面的實現(xiàn)邏輯和test.this一點關(guān)系都沒有,也沒有必要持有test.this???

問題解答

回答1:

public void perform(){ new Speaker().handleAction(new Action(){@Overridepublic void action() { report();//???為什么能調(diào)用report??} });}

new Speaker()不是匿名內(nèi)部類,它有確切的類名Speakernew Action(){}是匿名內(nèi)部類,會在編譯的時候給它一個類名(我們假定它的類名叫Test$1,你可以打印this.getClass()看看)看出兩者的區(qū)別了嗎?匿名內(nèi)部類多出了個{}。由于new Action(){}是在test對象的作用域里被創(chuàng)建的,所以它的外部類是Test。

匿名內(nèi)部類也有構(gòu)造器,而且和普通類的構(gòu)造器有點不一樣,編譯的時候會在匿名內(nèi)部類的構(gòu)造器的參數(shù)列表之前再插入一個參數(shù),這個參數(shù)是外部類的對象的引用,編譯之后這個類長這樣:

Test$1 implements Action { final T this$0; Test$1(T this$0){this.this$0 = this$0; }@Override public void action() {this$0.report(); }}

new Action(){...}實際上是創(chuàng)建了Test$1,并且通過構(gòu)造器把test對象引用傳給Test$1

public void perform(){ new Speaker().handleAction(new Test$1(this));}

所以匿名內(nèi)部類持有外部類的引用,且可以調(diào)用外部類的方法

標簽: java
主站蜘蛛池模板: 国产精品亚洲片夜色在线 | 毛片96视频免费观看 | 波多野结衣一级片 | 黄色成人毛片 | 免费一级a毛片在线播 | 久久久久久久久久久福利观看 | 中文精品视频一区二区在线观看 | 日本成人免费在线 | 中文一级国产特级毛片视频 | 男女男精品视频免费观看 | 国产精品久久久久网站 | 亚洲欧美日韩国产精品影院 | 亚洲一区视频在线播放 | 99国产成人高清在线视频 | 乱子伦xxxx| 91视频社区| 免费观看国产网址你懂的 | 国产精品久久久久久久久久98 | 国产成人高清一区二区私人 | 久久综合99re久久爱 | 这里只有精品国产 | 亚洲一区二区三区不卡视频 | 不卡一级毛片免费高清 | 高清成人爽a毛片免费网站 高清大学生毛片一级 | 国产高清视频在线 | 日韩性片 | 啪啪一级片 | 步兵一区二区三区在线观看 | 日韩 欧美 自拍 | 国产精品短视频免费观看 | 亚洲欧美中文日韩在线v日本 | 国产欧美一区二区三区精品 | 加勒比一本大道香蕉在线视频 | 中文字幕视频在线观看 | 亚洲国产精品久久久久秋霞不卡 | 日本aaaa精品免费视频 | 亚州成人 | 免费观看一级成人毛片软件 | 欧美综合成人网 | 成年人在线免费观看视频网站 | 亚洲男人天堂网站 |