如何解析'隐式超级构造函数classA()是不可见的.必须显式调用另一个构造函数'?

Rak*_*yal 12 java constructor

我有一个类'ClassA',它有私有构造函数.

public final class ClassA{
  private ClassA{
  }

  public static void main(String[] arg) }{
  ;
  ;
  ;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在扩展"ClassA"类[ 在执行此操作之前删除了最终关键字]

public class ClassB extends ClassA{
     public static void main(String[] arg) }{
      ;
      ;
      ;
      }

}
Run Code Online (Sandbox Code Playgroud)

现在,我到了Implicit super constructor classA() is not visible. Must explicitly invoke another constructor.它是什么意思以及如何解决这个问题?

注意 我无法更改ClassA构造函数的访问说明符.

Jul*_*rau 7

将ClassA的构造函数可见性更改privateprotected.

构造函数总是从调用超类构造函数开始.如果构造函数显式包含对超类构造函数的调用,则使用该构造函数.否则暗示无参数构造函数.如果无参数构造函数不存在或子类不可见,则会出现编译时错误.


Biv*_*vas 7

我会建议组合而不是继承(也许这就是设计师ClassA用于类使用的.示例:

public class ClassB {
   private ClassA classA;

   ClassB() {
       // init classA
       ...
   }

   public ClassA asClassA() {
       return classA;
   }

   // other methods and members for ClassB extension
}

您可以将方法委派ClassBClassA或覆盖它们.