Can We have a Private Constructor in Class
Points To Remember
- A constructor have the same name as that of a class.
- A constructor does not have any return type, not even void.
- Constructor of a class is called first, before any other method is called.
- Constructor of a super class is called before the base class constructor.
- We can have a private constructor in a java class.
- A class with a private constructor can not be inherited.
- We cannot create object of a class with a private constructor.
What happens if we have a Private Constructor in a class.
In the example below, we have a class A and we created the constructor of this class that just prints a statement. Now we created the object of this class from a main method. The code will compile and run successfully to give a output. Thus, this proofs that we can have a private constructor in a class.
class A { private A(){ System.out.println("Private Constructor of A"); } public static void main(String args[]){ System.out.println("Hello World"); A obj = new A(); } }
Hello World Private Constructor of A
What happens if we try to create an object of a class with a Private Constructor.
Now, if we have a class with a private constructor and we try to create the object of this class e.g. If we have a class A and another class B, both with private constructors and we try to create object of class B from class A. This will throw a compile time exception stating that we can not create the object of class B because we cannot access its default constructor. Thus we cannot create the object of a class that has a private constructor. Remember that, a whenever an object of a class is created, its default constructor must be accessible by the class that is trying to create its object.class B{ private B(){ System.out.println("Private Constructor of B"); } } class A { private A(){ System.out.println("Private Constructor of A"); } public static void main(String args[]){ System.out.println("Hello World"); A objectA = new A(); B objectB = new B(); } }
A.java:19: error: B() has private access in B B objectB = new B(); ^ 1 error
What happens if we try to inherit a class with a Private Constructor.
Now, if we create a class B with a private constructor and try to inherit this class, we will get a compile time error stating that the class B have a private constructor. This means that a class with the private constructor can not be inherited.class B{ private B(){ System.out.println("Private Constructor of B"); } } class A extends B { private A(){ System.out.println("Private Constructor of A"); } public static void main(String args[]){ System.out.println("Hello World"); } }
A.java:12: error: B() has private access in B private A(){ ^ 1 errorThus we cannot extend a class or make an object of a class that has a private constructor because its default constructor becomes inaccessible. When we inherit a class the default constructor of the super class is executed before the constructor of the base class is executed. Also when we make an object of a class its default constructor is accessed before any other method is accessed. Thus constructor must be accessible for making the object of a class or inheriting a class. We can that a class with a private constructor can not be inherited nor we can make the object of this class.
No comments: