Why Constructors are not inherited in Java? - GeeksforGeeks

30 Nov, 2018
Constructor is a block of code that allows you to create an object of class and has same name as class with no explicit return type.
Whenever a class (child class) extends another class (parent class), the sub class inherits state and behavior in the form of variables and methods from its super class but it does not inherit constructor of super class because of following reasons:
Constructors are special and have same name as class name. So if constructors were inherited in child class then child class would contain a parent class constructor which is against the constraint that constructor should have same name as class name. For example see the below code:class Parent {    public Parent()    {    }      public void print()    {    }}  public class Child extends Parent {    public Parent()    {    }    public void print()    {    }      public static void main(String[] args)    {        Child c1 = new Child(); // allowed        Child c2 = new Parent(); // not allowed    }}If we define Parent class constructor inside Child class it will give compile time error for return type and consider it a method. But for print method it does not give any compile time error and consider it a overriding method.
class Parent {    public Parent()    {    }      public void print()    {    }}  public class Child extends Parent {    public Parent()    {    }    public void print()    {    }      public static void main(String[] args)    {        Child c1 = new Child(); // allowed        Child c2 = new Parent(); // not allowed    }}
If we define Parent class constructor inside Child class it will give compile time error for return type and consider it a method. But for print method it does not give any compile time error and consider it a overriding method.
Now suppose if constructors can be inherited then it will be impossible to achieving encapsulation. Because by using a super class’s constructor we can access/initialize private members of a class.
A constructor cannot be called as a method. It is called when object of the class is created so it does not make sense of creating child class object using parent class constructor notation. i.e. Child c = new Parent();
A parent class constructor is not inherited in child class and this is why super() is added automatically in child class constructor if there is no explicit call to super or this.
This article is contributed by Sajid Ali Khan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Java-Constructors
java-inheritance
java-overriding
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Arrays in Java
Split() String method in Java with examples
For-each loop in Java
Arrays.sort() in Java with examples
Reverse a string in Java
Initialize an ArrayList in Java
Object Oriented Programming (OOPs) Concept in Java
HashMap in Java with Examples
Interfaces in Java
How to iterate any Map in Java