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
,并且只能通过它的构造函数设置
# 1 楼答案
他们这样做是有原因的,但您可以使用java中的反射从这个类创建对象,即使它是私有的
下面是一个例子:
# 2 楼答案
我认为这是不可能的,看看this post和these docs。您可能要做的是将两个(或多个)类文件放入它们自己的包中,然后使用
protected
访问修饰符,以便构造函数只能在包中使用。如果只放置从LibraryClass
类继承的类,则其效果与如上所述创建构造函数private
相同