## Why is this an issue?

Calling an overridable method from a constructor could result in failures or strange behaviors when instantiating a subclass which overrides the method.

For example:

- The subclass class constructor starts by contract by calling the parent class constructor.
- The parent class constructor calls the method, which has been overridden in the child class.
- If the behavior of the child class method depends on fields that are initialized in the child class constructor, unexpected behavior (like a `NullPointerException`) can result, because the fields aren’t initialized yet.

### Noncompliant code example

    public class Parent {

      public Parent () {
        doSomething();  // Noncompliant
      }

      public void doSomething () {  // not final; can be overridden
        ...
      }
    }

    public class Child extends Parent {

      private String foo;

      public Child(String foo) {
        super(); // leads to call doSomething() in Parent constructor which triggers a NullPointerException as foo has not yet been initialized
        this.foo = foo;
      }

      public void doSomething () {
        System.out.println(this.foo.length());
      }

    }

## Resources

- CERT, MET05-J. - Ensure that constructors do not call overridable methods
- CERT, OOP50-CPP. - Do not invoke virtual functions from constructors or destructors