Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Must subclass call constructor of super class

 
kranthi kumar Vaddireddy
Greenhorn
Posts: 14
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Must subclass call constructor of super class always and initialize its variable? What is the exception?

 
Nico Van Brandt
Ranch Hand
Posts: 69
IntelliJ IDE Java Mac
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You have 2 options invoking super:

super();
--or--
super(parameter list);

Note: If a constructor does not explicitly invoke a superclass constructor, the Java compiler automatically inserts a call to the no-argument constructor of the superclass. If the super class does not have a no-argument constructor, you will get a compile-time error. Object does have such a constructor, so if Object is the only superclass, there is no problem.
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Posts: 15284
39
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You don't have to call a superclass constructor explicitly; it is not necessary to always have a super() or super(arguments) call in a subclass constructor. If you do not specify it, the compiler will automatically add a call to the no-arguments superclass constructor.

I don't like it when people add an explicit super() call (with no arguments), because it is superfluous:

If the superclass does not have a no-arguments constructor, then you must explicitly call super(arguments) in each subclass constructor.
 
Campbell Ritchie
Sheriff
Pie
Posts: 48968
60
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The details are in the Java™ Language Specification. But it is reluctant to open for me.

Simply: yes. You must initialise all the fields, so as to create your instance in a consistent state, ie fulfilling its class invariants. The only instance where you can get away without a super(...); call is if the superclass has an accessible no-arguments constructor. One must presume that constructor will put the superclass object into a consistent state.
I think the only state in which case it is good design not to initialise the fields in the superclass is when the superclass hasn't got any fields!
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic