devxlogo

Constructors and Method Invocation

Constructors and Method Invocation

Question:
The following code works:

public class MyClass {    private int value;    public MyClass() { this(1); }    public MyClass(int v) { value = v; }}

Changing the null constructor to:

public MyClass() { this(defaultValue()); }

and adding:

private int defaultValue() { return 1; }

does not compile. Why?

Answer:
A general rule of object-oriented programming languages is that you cannot invoke methods of a subclass before all its superclasses have been constructed. At least this holds for C++ and Java. When you use defaultValue() as an argument to the second constructor, the java.lang.Object constructor has not yet been invoked. You can’t call methods in MyClass until after the basic object has been created, which would be inside the constructor after the superclass constructor. For the purposes of your example, you should just use a constant to denote a default value, such as:

static final int _DEFAULT_VALUE = 1;
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist