• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • paul wheaton
  • Jeanne Boyarsky
  • Ron McLeod
Sheriffs:
  • Paul Clapham
  • Liutauras Vilda
  • Devaka Cooray
Saloon Keepers:
  • Tim Holloway
  • Roland Mueller
Bartenders:

Using the Keyword super

 
Ranch Hand
Posts: 1282
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
i read the following in the sun java tutorials:


source: http://java.sun.com/docs/books/tutorial/java/IandI/subclasses.html
You can write a subclass constructor that invokes the constructor of the superclass, either implicitly or by using the keyword super.

source: http://java.sun.com/docs/books/tutorial/java/IandI/super.html
Using the Keyword super
Accessing Superclass Members
If your method overrides one of its superclass's methods, you can invoke the overridden method through the use of the keyword super. You can also use super to refer to a hidden field (although hiding fields is discouraged).

Invocation of a superclass constructor must be the first line in the subclass constructor.
The syntax for calling a superclass constructor is

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

With super(), the superclass no-argument constructor is called. With super(parameter list), the superclass constructor with a matching parameter list is called.

--------------------------------------------------------------------------------
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.
--------------------------------------------------------------------------------

If a subclass constructor invokes a constructor of its superclass, either explicitly or implicitly, you might think that there will be a whole chain of constructors called, all the way back to the constructor of Object. In fact, this is the case. It is called constructor chaining, and you need to be aware of it when there is a long line of class descent.


still, i have some doubts:
1) "(...)write a subclass constructor that invokes the constructor of the superclass, either implicitly(...)" means not explicitly calling super() inside my constructor?
2) "It is called constructor chaining, and you need to be aware of it when there is a long line of class descent." why should i be aware?
3) please take a look at the following code: as i dont need to override anything from superclass i dont need to call super() and anyway the compiler does it for me; am i right?
 
Ranch Hand
Posts: 710
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
still, i have some doubts:
1) "(...)write a subclass constructor that invokes the constructor of the superclass, either implicitly(...)" means not explicitly calling super() inside my constructor?
2) "It is called constructor chaining, and you need to be aware of it when there is a long line of class descent." why should i be aware?
3) please take a look at the following code: as i dont need to override anything from superclass i dont need to call super() and anyway the compiler does it for me; am i right?


1) Yes. If you do not include a call to super();, the compiler will automatically put one in for you.
2) Because the SuperClass constructor might do something that you need to be aware of. It could set a value to some variable, or perhaps create another object you need. Think about it like this: would you call a random method in your code without knowing what it does?
3) You wouldn't need to explicitly call super(); However, overriding and the use of super is different from constructor chaining and super();. The keyword super is used to access something from a class's superclass, whereas super() calls the superclass's no-arg constructor.
 
miguel lisboa
Ranch Hand
Posts: 1282
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
thank you
 
It's a pleasure to see superheros taking such an interest in science. And this tiny ad:
We need your help - Coderanch server fundraiser
https://coderanch.com/wiki/782867/Coderanch-server-fundraiser
reply
    Bookmark Topic Watch Topic
  • New Topic