# Java: Constructors - super example

## Example of class without parameterless constructor

    /////////////////// class without a parameterless constructor.
    //  If any constructor is defined, the compiler doesn't
    //  automatically create a default parameterless constructor.
    class Parent {
        int _x;
        Parent(int x) {   // constructor
            _x = x;
        }
    }

    ////////////////// class that must call super in constructor
    class Child extends Parent {
        int _y;
        Child(int y) {  // WRONG, needs explicit call to super.
            super(0);
            _y = y;
        }
    }

In the example above, there is no explicit call to a constructor in the first line of constructor, so the compiler will insert a call to the parameterless constructor of the parent, but there is no parameterless parent constructor! Therefore this produces a compilation error. The problem can be fixed by changing the `Child` class.

    ////////////////// class that must call super in constructor
    class Child extends Parent {
        int _y;
        Child(int y) {  // WRONG, needs explicit call to super.
            _y = y;
        }
    }

Or the `Parent` class can define a parameterless constructor.

    /////////////////// class without a parameterless constructor.
    //  If any constructor is defined, the compiler doesn't
    //  automatically create a default parameterless constructor.
    class Parent {
        int _x;
        Parent(int x) {   // constructor with parameter
            _x = x;
        }

        Parent() {        // constructor without parameters
            _x = 0;
        }
    }

A better way to define the parameterless constructor is to call the parameterized constructor so that any changes that are made only have to be made in one constructor.

        Parent() {        // constructor without parameters
            this(0);
        }
    }

Note that each of these constructors implicitly calls the parameterless constructor for its parent class, etc, until the `Object` class is finally reached.