有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从子类构造函数调用超类的私有构造函数?

在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标志在protectedLibraryClass中是final,并且只能通过它的构造函数设置


共 (2) 个答案

  1. # 1 楼答案

    他们这样做是有原因的,但您可以使用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();
            }
    
        }
    
  2. # 2 楼答案

    我认为这是不可能的,看看this postthese docs。您可能要做的是将两个(或多个)类文件放入它们自己的包中,然后使用protected访问修饰符,以便构造函数只能在包中使用。如果只放置从LibraryClass类继承的类,则其效果与如上所述创建构造函数private相同