午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

oop - Java中,關于匿名內部類調用外部類方法的疑惑

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

問題描述

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

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

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

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

問題解答

回答1:

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

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

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

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(){...}實際上是創建了Test$1,并且通過構造器把test對象引用傳給Test$1

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

所以匿名內部類持有外部類的引用,且可以調用外部類的方法

標簽: java
主站蜘蛛池模板: 欧美网站在线观看 | 在线看毛片网站 | 美日韩在线 | 激情综合五月婷婷 | 91视频久久久 | 国产亚洲精品av | 欧美精品福利视频 | 国产精品麻豆免费版 | 中文字幕亚洲精品在线 | 精品国产97| 日韩av手机在线播放 | 日本一级做a爱片 | 中文字幕亚洲高清 | 亚洲精品2 | 一区二区国产精品视频 | 日骚b| 欧美五十路| 第一页在线 | 尹人综合网 | 哥布林洞窟动漫在线观看 | 五月婷婷伊人网 | 欧美一级免费大片 | 男女性高潮免费网站 | 欧美激情免费视频 | 超级碰在线 | 欧美亚洲天堂 | 国产第一页在线观看 | 黄色资源网 | 中日韩欧美在线观看 | 国产精品久久久久久免费免熟 | 久久精品婷婷 | 国产一区精品在线观看 | 成人深夜视频 | 中文字幕精品视频在线观看 | 99视频在线看 | 波多野结衣91| 欧美高清一区二区 | 久久免费在线观看视频 | 免费看成年人视频 | 黄色精品视频 | 涩涩网站在线观看 |