Skip to main content

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.
Suppose if we make a private constructor of our class and try to create the object of that class from that class only.
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 error
Thus 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.

Comments