I am having a class \'ClassA\' which is having private constructor.
public final class ClassA{
private ClassA{
}
public static void main(String[] arg)
Java will implicitly create a constructor with no parameters for ClassB, which will call super(). In your case the constructor in ClassA is not visible, hence the error you are getting. Changing the visibility to public or protected will resolve the error.
Change the constructor visibility of ClassA from private
to protected
.
Constructors always begin by calling a superclass constructor. If the constructor explicitly contains a call to a superclass constructor, that constructor is used. Otherwise the parameterless constructor is implied. If the no-argument constructor does not exist or is not visible to the subclass, you get a compile-time error.
I would suggest composition instead of inheritance (maybe that's what the designer of ClassA
intended for class usage. Example:
public class ClassB { private ClassA classA; ClassB() { // init classA ... } public ClassA asClassA() { return classA; } // other methods and members for ClassB extension }
You can delegate methods from ClassB
to ClassA
or override them.
Changing private ClassA{}
to protected ClassA{}
sounds like a good solution.
Parent constructor is always called in child class: implicitly or not. So, your ClassB
definition is equivalent to
public ClassB extends ClassA {
public ClassB() {
super();
}
// all other methods you have go here...
}
If the only constructor of ClassA
is private, it can't be called from ClassB
.