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

Java 內部類與外部類同名時,如何在外部類中創建同名外部類對象

     編輯:程式設計綜合問答

問題場景

當外部類 A 定義了一個內部類 B,且項目中還存在一個同名的頂層類 B 時,在 A 內部直接 `new B()` 只能實例化內部類 B,無法直接訪問外部同名類 B。

代碼示例

class A {
    class B { } // 內部類 B(甲)
}
class B { } // 頂層類 B(乙)

解決方案:使用完整限定名

在外部類 A 中創建頂層類 B 的對象,需使用完整包名+類名,或利用 Class.forName() 反射獲取。

方式一:完整限定名(推薦)

class A {
    class B { }
    void createOuterB() {
        // 假設頂層類 B 在包 com.example 中
        com.example.B outerB = new com.example.B();
    }
}

方式二:反射獲取

try {
    Class clazz = Class.forName("com.example.B");
    Object outerB = clazz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
    e.printStackTrace();
}

注意事項

  • 若頂層類 B 在默認包(無包名)中,則無法通過限定名區分,建議避免使用默認包,或重命名類以消除歧義。
  • 內部類編譯後生成 `A$B.class`,頂層類為 `B.class`,JVM 層面無衝突,僅是源碼編譯期的名稱解析問題。

最佳實踐

命名規範上盡量避免內部類與頂層類同名;若不可避免,統一使用包名限定,保持代碼清晰可維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved