I am having a class 'ClassA' which is having private constructor.
public final class ClassA{
private ClassA{
}
public static void main(String[] arg) }{
;
;
;
}
}
Now, i am extending the class 'ClassA' [ final keyword is removed before doing this ]
public class ClassB extends ClassA{
public static void main(String[] arg) }{
;
;
;
}
}
Now, i am getting Implicit super constructor classA() is not visible. Must explicitly invoke another constructor
. What does it mean and how to resolve this?
Note i can not change the access specifier of ClassA constructor.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With