簡體   English   中英

如何從子類構造函數調用超類的私有構造函數?

[英]How to call private constructor of super class from child class constructor?

在 Java 中,我試圖覆蓋來自庫的類。 該類的構造函數之一是私有的,因此我無法從我的類中調用它。 有沒有辦法解決這個問題(反射?)?

public class LibraryClass extends ProtectedLibraryClass {
  public LibraryClass() {
    super();
  }

  private LibraryClass(Boolean useFeature) {
    super(useFeature);
  }

  // Other methods
}

public class MyClass extends LibraryClass {
  
  public MyClass() {
    super();
  }

  private MyClass(Boolean useFeature) {
    super(useFeature); // <-- This line throws exception as super class constructor is private
  }
  // Override other methods
}

我不能只調用super()然后設置 useFeature 標志,因為 useFeature 標志在protectedLibraryClassfinal ,並且只能通過它的構造函數設置。

他們這樣做是有原因的,但是您可以在 Java 中使用反射從此類創建對象,即使它是私有的

這是示例:

   public static void main(String[] args) {
        LibraryClass copy = null;
        try {
            Constructor[] constructors = LibraryClass.class.getDeclaredConstructors();
            for (Constructor constructor : constructors) {
                constructor.setAccessible(true);
                copy = (LibraryClass) constructor.newInstance();
                break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

我認為這是不可能的,看看這篇文章這些文檔 您可能會做的是將兩個(或多個)類文件放入它們自己的包中,然后使用protected訪問修飾符,以便構造函數僅在包內可用。 如果您只放置從LibraryClass類繼承的類,它與將構造函數設為private效果相同,如上所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM