Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Java Language
Expertise: Beginner
Jan 8, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Constructors and Method Invocation

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?

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;
DevX Pro
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date