Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

super-constructor if there is no super class?

I found a class like this:

public class Computer implements Serializable {

        private static final long serialVersionUID = 1L;    

        //...
        public Computer() {
            super();
        }
        //...
}

Can someone explain me, how this works? The class isn't inheriting any super class and there could still be "super();" in the constructor?

like image 281
codepleb Avatar asked Jan 17 '14 08:01

codepleb


4 Answers

By default all classes inherit java.lang.Object. So a hidden code in your class is

public class Computer extends java.lang.Object implements Serializable {

        private static final long serialVersionUID = 1L;    

        //...
        public Computer() {
            super(); //here Object's default constructor is called
        }
        //...
}

If a parent class has default constructor (no argument) and if a child class defines a default constructor, then an explicit call to parent's constructor is not necessary.

Java does it implicitly, in other words, Java puts super() before first statement of the child's constructor

consider this example

class Base {

    public Base() {
        System.out.println("base");
    }
}

class Derived extends Base {

    public Derived() {
        //super(); call is not necessary.. Java code puts it here by default
        System.out.println("derived");
    }
}

So when you create Derived d = new Derived(); the output is..

base
derived
like image 150
sanbhat Avatar answered Oct 02 '22 22:10

sanbhat


When you do not extends any class then by default the inherited class is Object so it calls Object class constructor.

like image 45
Qadir Hussain Avatar answered Oct 02 '22 21:10

Qadir Hussain


In Java, Object class is at the top of the Class hierarchy. Implicitly, All the Classes are implicitly of Object type. Invocation of super() method is not needed explicitly in code. But, this will be added by the compiler during conversion of Class into bytecode. so, the first line in any constructor would be invocation of super() implicitly by default. Construction of an object includes all the invocation of default constructors of Super classes. But, you can also call a customized argument constructor of the super class in your class constructor.

like image 41
Keerthivasan Avatar answered Oct 02 '22 22:10

Keerthivasan


By default every java class implicitly inherits java.lang.Object class. So, super() will call the Object class constructor in your case!

like image 28
Abimaran Kugathasan Avatar answered Oct 02 '22 20:10

Abimaran Kugathasan