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

z3yyvxxp  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(498)

在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标志为 final 在里面 protectedLibraryClass 并且仅通过其构造函数设置。

yrwegjxp

yrwegjxp1#

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

    }
h7wcgrx3

h7wcgrx32#

我认为这是不可能的,看看这篇文章和这些文档。您可能要做的是将两个(或多个)类文件放入它们自己的包中,然后使用 protected 访问修饰符,以便构造函数只能在包中使用。如果只放置从 LibraryClass 类,它将具有与生成构造函数相同的效果 private 如上所述。

相关问题