Super in constructor

Hi,
I have come across following piece of code.
Public class A {
/*  Some variables  */
public A(){
super();
}Here, I don't understand why "super()" is used although class A is not extending any other class (forget Object class)!!
Any thoughts?
Thanks in advance,
Arun

> Here, I don't understand why "super()" is used
although class A is not extending any other
class (forget Object class)!!
It's a bit extraneous; the compiler will insert a call to super() automagically. This applies to every constructor, whether the class extends something other than java.lang.Object or not.
Constructor rules:
1) Every class has at least one constructor.
1.1) If you do not define an explicit constructor for your class, the compiler provides a implicit constructor that takes no args and simply calls super().
1.2) If you do define one or more explicit constructors, regardless of whether they take args, then the compiler no longer provides the implicit no-arg constructor. In this case, you must explicitly define a public MyClass() {...} if you want one.
1.3) Constructors are not inherited.
2) The first statement in the body of any constructor is either a call to a superclass constructor super(...) or a call to another constructor of this class this(...) 2.1) If you do not explicitly put a call to super(...) or this(...) as the first statement in a constructor that you define, then the compiler implicitly inserts a call to super's no-arg constructor super() as the first call. The implicitly called constructor is always super's no-arg constructor, regardless of whether the currently running constructor takes args.
2.2) There is always exactly one call to either super(...) or this(...) in each constructor, and it is always the first call. You can't put in more than one, and if you put one in, the compiler's implicitly provided one is removed.
~

Similar Messages

  • How to inherit super class constructor in the sub class

    I have a class A and class B
    Class B extends Class A {
    // if i use super i can access the super classs variables and methods
    // But how to inherit super class constructor
    }

    You cannot inherit constructors. You need to define all the ones you need in the subclass. You can then call the corresponding superclass constructor. e.g
    public B() {
        super();
    public B(String name) {
        super(name);
    }

  • What is the significance of super() in constructor?

    excuse me, my english is poor.
    public class App2 extends App1{
    App2(String str){
    //there is a crytic super() *****why?****
    System.out.println(str);
    public static void main(String args[]){
    App2 tt=new App2("hello");
    class App1{
    App1(){
    System.out.println("App1 constructor");
    //end progarm
    why there is a crytic super()?
    What is the significance of super() in constructor?

    "public class App2 extends App1"
    implies that App2 inherits something from App1.
    e.g.
    App1 has member data a1, b1, c1 and App2 add its own member data a2, b2, c2. Since App2 extends App1, now App2 has member data a1, b1, c1, a2, b2, c2.
    If you call App2's constructor, you can initialize a2, b2, c2. How about a1, b1, c1? If you don't use super in App2's constructor, a1 b1 c1 won't be initialized. So, call super to let App1 initialize a1, b1 and c1.

  • Is it possible to override super class constructor?

    Is it possible to override super class constructor form subclass?

    However, you can achieve do something that looks similar to overriding.
    class Parent {
      Parent(int i, String s) {
        // do stuff
    class Child extends Parent {
      Child(int i, String s) {
        super(i, s);
        // do Child stuff here
    new Parent(1, "abc");
    new Child(2, "xyz");Although that's not overriding, it sort of looks similar. Is this what you were talking about?

  • Don't need call to super class constructor

    Hi, I have
    class A {
    public A() { System.out.println("in A()");}
    public class B extends A
    { public B() {
    System.out.println("in B()");}
    public static void main( String args[] ) {
    B b = new B();}
    I don't want the super class constructor to be called... What to do? Please tell me solution other than usage of parameterised constructor?

    I don't want the super class constructor to be called... What to do? Can't be done. One of the constructors of the super class must be invoked. (Implicitly or explicitly)
    Kaj

  • Can defualt inherited the Super Class constructor to sub class ?

    Hi,
    is it passible to inherit the super class constructor by defualt when extends the super class.
    Thanks
    MerlinRoshina

    Constructor rules:
    1) Every class has at least one ctor.
    1.1) If you do not define an explicit constructor for your class, the compiler provides a implicit constructor that takes no args and simply calls super().
    1.2) If you do define one or more explicit constructors, regardless of whether they take args, then the compiler no longer provides the implicit no-arg ctor. In this case, you must explicitly define a public MyClass() {...} if you want one.
    1.3) Constructors are not inherited.
    2) The first statement in the body of any ctor is either a call to a superclass ctor super(...) or a call to another ctor of this class this(...) 2.1) If you do not explicitly put a call to super(...) or this(...) as the first statement in a ctor that you define, then the compiler implicitly inserts a call to super's no-arg ctor super() as the first call. The implicitly called ctor is always super's no-arg ctor, regardless of whether the currently running ctor takes args.
    2.2) There is always exactly one call to either super(...) or this(...) in each constructor, and it is always the first call. You can't put in more than one, and if you put one in, the compiler's implicitly provided one is removed.

  • Invoke super class constructor of super class' parent class

    I would like to invoke a constructor of a super class that is the parent of the direct super class. For instance:
    class C extends class B, and class B extends class A.
    From class C, is it possible to invoke class A's constructor without first invoking class B constructor?
    Something like super.A() ??
    Thanks.
    Joe

    try this,
    abstract class GrandParent
          private Object pObj = null;
          protected Via via = new Via();
          protected class Via
             public Object doMethod1( Object obj )
                pObj = obj;
                return "GrandParent m1: " + pObj;
             public Object doMethod2( Object obj )
                pObj = obj;
                return "GrandParent m2: " + pObj;
             public Object get()
                return "gp get: " + pObj;
          public abstract Object doMethod1( Object obj );
          public abstract Object doMethod2( Object obj );
          public abstract Object get();
    class Parent extends GrandParent
          private Object pObj = null;
          public Object doMethod1( Object obj )
          pObj = obj;
          return "Parent m1: " + pObj;
          public Object doMethod2( Object obj )
          pObj = obj;
          return "Parent m2: " + pObj;
          public Object get()
          return "p get: " + pObj;
    public class GPMethod extends Parent
          public static void main( String[] args )
          GrandParent gp = new Parent();
          System.out.println( gp.doMethod1( "calling parent" ) );
          System.out.println( gp.doMethod2( "calling parent m2" ) );
          System.out.println( gp.get() );
          System.out.println( "" );
          System.out.println( gp.via.doMethod1( "calling via to GP" ) );
          System.out.println( gp.via.doMethod2( "calling via to GP m2" ) );
          System.out.println( gp.via.get() );
    }

  • Invoked super class constructor means create an object of it?

    Hei,
    i have create one class that extends another class. when i am creating an object of sub class it invoked the constructor of the super class. thats okay.
    but my question is :
    constructor is invoked when class is intitiated means when we create an
    object of sub class it automatically create an object of super class. so means every time it create super class object.

    Hi,
       An object has the fields of its own class plus all fields of its parent class, grandparent class, all the way up to the root class Object. It's necessary to initialize all fields, therefore all constructors must be called! The Java compiler automatically inserts the necessary constructor calls in the process of constructor chaining, or you can do it explicitly.
       The Java compiler inserts a call to the parent constructor (super) if you don't have a constructor call as the first statement of you constructor.
    Normally, you won't need to call the constructor for your parent class because it's automatically generated, but there are two cases where this is necessary.
       1. You want to call a parent constructor which has parameters (the automatically generated super constructor call has no parameters).
       2. There is no parameterless parent constructor because only constructors with parameters are defined in the parent class.
       I hope your query is resolved. If not please let me know.
    Thanks & Regards,
    Charan.

  • Sub class   calls super in constructor

    when a sub calss calls super() in its constructor is it overriding the constructor of base class ?
    Class A {
    A(Strin neme){
    class B extend A{
    B(){
    super("test")
    Systemout......
    I donot know the term explaning this feature is it called overriding constructor?

    miro_connect wrote:
    so how to describe this code, are there any terms to explain this methodology to not technical guys ?Yeh. "Magic". Seriously. There's little point explaining such things to non-technical people. Ever tried to teach your mum how to program a VCR?
    By definition, non-tech people will simply not understand what you're on about, and won't need to.

  • Using super class constructor in subclass constructor

    Hi all. How can I use Person() in my Client()?
    something like this:
    public class Client extends Person{
          private float balance;
          Client(String firstName,String midleName,String lastName,Contacts contacts,Adress adress,float balance){
               this= Person(firstName,midleName,lastName,contacts,adress);
               this.balance=balance;
          }

    public class Client extends Person{
      private float balance; // float?!? Are you sure.... ?
      Client(String firstName,String midleName,String lastName,Contacts contacts,Adress adress,float balance){
        super(firstName,midleName,lastName,contacts,adress);
        this.balance=balance;
    }

  • Catching exception of a super constructor

    Is it possible to catch the exception thrown by a super class
    constructor in a sub clas constructor?
    public class A
         public A() throws Exception
              throw new Exception("Exception from A");
    class B extends A
         public B()
              try
                   super();
              catch(Exception e)
    }I get an error saying,
    A.java:16: call to super must be first statement in constructor
    super();
    ^
    Any thoughts?

    More on this here,
    http://archive.devx.com/free/tips/tipview.asp?content_i
    =2384&Java=ONThanks for that link. I completely agree to what it says.
    In other words, not being able to successfully construct our super class implies that we cannot create our derived class.
    But I feel this must be mentioned clearly somewhere in JLS. And the error message that we get must be "You cannot catch exceptions thrown by a super class constructor".

  • Why do we use super when there is no superclass?

    Hello,
    I have a question about the word "super " and the constructor. I have read about super and the constructor but there is somethong that I do not understand.
    In the example that I am studying there is a constructor calles " public MultiListener()" and there you can see " super" to use a constructor from a superclass. But there is no superclass. Why does super mean here?
    import javax.swing.*;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import java.awt.Dimension;
    import java.awt.Color;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    public class MultiListener extends JPanel
                               implements ActionListener {
        JTextArea topTextArea;
        JTextArea bottomTextArea;
        JButton button1, button2;
        final static String newline = "\n";
        public MultiListener() {
            super(new GridBagLayout());
            GridBagLayout gridbag = (GridBagLayout)getLayout();
            GridBagConstraints c = new GridBagConstraints();
            JLabel l = null;
            c.fill = GridBagConstraints.BOTH;
            c.gridwidth = GridBagConstraints.REMAINDER;
            l = new JLabel("What MultiListener hears:");
            gridbag.setConstraints(l, c);
            add(l);
            c.weighty = 1.0;
            topTextArea = new JTextArea();
            topTextArea.setEditable(false);
            JScrollPane topScrollPane = new JScrollPane(topTextArea);
            Dimension preferredSize = new Dimension(200, 75);
            topScrollPane.setPreferredSize(preferredSize);
            gridbag.setConstraints(topScrollPane, c);
            add(topScrollPane);
            c.weightx = 0.0;
            c.weighty = 0.0;
            l = new JLabel("What Eavesdropper hears:");
            gridbag.setConstraints(l, c);
            add(l);
            c.weighty = 1.0;
            bottomTextArea = new JTextArea();
            bottomTextArea.setEditable(false);
            JScrollPane bottomScrollPane = new JScrollPane(bottomTextArea);
            bottomScrollPane.setPreferredSize(preferredSize);
            gridbag.setConstraints(bottomScrollPane, c);
            add(bottomScrollPane);
            c.weightx = 1.0;
            c.weighty = 0.0;
            c.gridwidth = 1;
            c.insets = new Insets(10, 10, 0, 10);
            button1 = new JButton("Blah blah blah");
            gridbag.setConstraints(button1, c);
            add(button1);
            c.gridwidth = GridBagConstraints.REMAINDER;
            button2 = new JButton("You don't say!");
            gridbag.setConstraints(button2, c);
            add(button2);
            button1.addActionListener(this);
            button2.addActionListener(this);
            button2.addActionListener(new Eavesdropper(bottomTextArea));
            setPreferredSize(new Dimension(450, 450));
            setBorder(BorderFactory.createCompoundBorder(
                                    BorderFactory.createMatteBorder(
                                                    1,1,2,2,Color.black),
                                    BorderFactory.createEmptyBorder(5,5,5,5)));
        public void actionPerformed(ActionEvent e) {
            topTextArea.append(e.getActionCommand() + newline);
            topTextArea.setCaretPosition(topTextArea.getDocument().getLength());
         * Create the GUI and show it.  For thread safety,
         * this method should be invoked from the
         * event-dispatching thread.
        private static void createAndShowGUI() {
            //Create and set up the window.
            JFrame frame = new JFrame("MultiListener");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Create and set up the content pane.
            JComponent newContentPane = new MultiListener();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
    }

    OP wrote:
    >
    Isn't that simplier to use the constructor instead of using "super"? I mean using the constructor jpanel () ?
    >
    You can't call the super class constructor directly if you are trying to construct the sub-class. When you call it directly it will construct an instance of the super class but that instance will NOT be an integral part of the 'MultiListener' sub class you are trying to create.
    So since 'MultiListener' extends JPanel if you call the JPanel constructor directly (not using super) your code constructing a new instance of JPanel but that instance will not be an ancestor of your class that extends JPanel. In fact that constructor call will not execute until AFTER the default call to 'super' that will be made without you even knowing it.
    A 'super' call is ALWAYS made to the super class even if your code doesn't have an explicit call. If your code did not include the line:
    super(new GridBagLayout()); Java would automatically call the public default super class constructor just as if you had written:
    super();If the sub class cannot access a constructor in the super class (e.g. the super class constructor is 'private') your code won't compile.

  • Reference to enclosing instance in inner class constructor

    Is there any Java compiler which assigns reference to enclosing instance in constructor of inner clase before invoking super class constructor?
    class Outer {
    class Inner extends Global {
    public Inner(int x) {
    // I want (Outer.this != null) here
    super();
    class Global {
    public Global(int x) {

    class Outer {
    class Inner extends Global {
    public Inner(int x) {
    // I want (Outer.this != null) hereOuter.this is never null at this point. A non-static
    inner class always has an implicit reference to an
    instance of the enclosing class.Try this:
    class Outer {
    int m;
    class Inner extends Global {
    public Inner(int x) {
    super(x);
    protected void init(int x) {
    xxx = Outer.this.m + x; // Null pointer exception!!!
    class Global {
    int xxx;
    public Global(int x) {
    init(x);
    protected void init(int x) {
    xxx = x;

  • How is super class's method called?

    I'm having some doubt about Item 15 in Effective Java, "Design and document for inheritance or else prohibit it".
    The author says if a class is intended to be inherited, then its constructor must not invoke any overridable methods. He gives the following example code. The result of running proves the author's word: The first line is null, and then the second line is a date.
    My question is why Super's constructor calls Sub's version of m, but not its own? Can anyone give me some explanation?
    import java.util.*;
    class Super {
    // Broken - constructor invokes overridable method
        public Super() {
            m();
        public void m() {
    public final class Sub extends Super {
        private final Date date; // Blank final, set by constructor
        Sub() {
            date = new Date();
    // Overrides Super.m, invoked by the constructor Super()
        public void m() {
            System.out.println(date);
        public static void main(String[] args) {
            Sub s = new Sub();
            s.m();
    }

    First up, it's handy (good practice?) to include
    calls to super() in your constructors as an explicit
    reminder as to the order that they'll be executed,
    e.g.
    Sub() {
    super();
    date = new Date();
    }This makes it clear that the superclass's
    constructor will be executed before date is
    initialised.
    Now to your question: a subclass and a superclass
    form a single whole object; the subclass doesn't 'sit
    on top' of the superclass, as it were. Because the
    subclass, Sub, overrides the superclass's
    implementation of method m, its implementation will
    always be invoked. Only Sub.m can call its
    super implementation (i.e. super.m()); So, for
    example, even this would call Sub's implementation of
    method m:Super a = new Sub();
    a.m(); // will invoke Sub.m(), not Super.m()!
    Thank everybody for all the replies.
    Super a = new Sub();
    a.m(); // will invoke Sub.m(), not Super.m()!This is easy to understand. although a is of type Spuer, it's an instance of Sub, so the runtime will decide to invoke Sub's implemention. This is right where Polymorphism comes.
    So it can go a step further, when an instance is being constructed, an instance of Super never exists, and there is only one instance, it's a Sub instance. So, although the m method is invoked by the Super constructor, which version is invoked is chosen by the instance.

  • Even i call this() paramerterised constuctor in my class, Is super class su

    Even i call this() paramerterised constuctor in my class, Is super class super() parameter less constuctor invokes?
    I have excuted the following program. And result will be as follows:
    Grandparent() constructor
    Parent 25 constructor
    Parent() constructor
    Child() constructor
    The program is below:
    class ConstructorChain {
    public static void main(String[] args) {
    Child c = new Child();
    class Child extends Parent {
    Child() {
    System.out.println("Child() constructor");
    class Parent extends Grandparent {
    Parent() {
    this(25);
    System.out.println("Parent() constructor");
    Parent(int x) {
    System.out.println("Parent(" + x + ") constructor");
    class Grandparent {
    Grandparent() {
    System.out.println("Grandparent() constructor");
    for this my excepected answer is
    Parent 25 constructor
    Parent() constructor
    Child() constructor
    because in parent class i defined this() constructor so, as my undersatnd is it never call Grand Parent Constructor as it is default parameterless constructor.
    please Advise me
    Aruna

    You can't initialize a class without it's super classes constructor being run. So even if you call another constructor (of the same class), the parent classes constructor will still be called.

Maybe you are looking for