首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 內部類訪問外部類:OuterClass.this 詳解

     編輯:程式設計綜合問答

語法含義

OuterClass.this 表示內部類實例所關聯的外部類實例引用。

應用場景

  1. 區分同名成員:內部類與外部類有同名字段/方法時,用 OuterClass.this.field 訪問外部類成員。
  2. 傳遞外部類引用:需將外部類實例傳給其他方法時,使用 OuterClass.this 而非 this(後者指內部類實例)。
  3. 創建內部類實例(靜態上下文):OuterClass outer = new OuterClass(); OuterClass.Inner inner = outer.new Inner(); 內部實例隱式持有 outer 引用,即 OuterClass.this。

代碼示例

public class Outer {
  private String name = "Outer";

  class Inner {
    private String name = "Inner";

    void print() {
      System.out.println(this.name);        // Inner
      System.out.println(Outer.this.name);  // Outer
    }
  }

  public static void main(String[] args) {
    Outer outer = new Outer();
    Outer.Inner inner = outer.new Inner();
    inner.print();
  }
}

編譯器實現原理

非靜態內部類編譯後構造方法會隱式增加 Outer outer 參數,內部實例持有 this$0 引用指向外部實例。Outer.this 即訪問該隱式字段。

注意

  • 靜態內部類(static class Inner)無 Outer.this,因不依賴外部實例。
  • 匿名內部類同理:new Runnable() { void run() { System.out.println(Outer.this.name); } }。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved