Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


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

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

 

 

 

 

 


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

 

 

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