<< Chapter < Page | Chapter >> Page > |
The discussion for Question 4 explained that if you define any constructor in a new class, you must define all constructors that will ever beneeded for that class. When you define one or more constructors, the default noarg constructor is no longer provided by the system on your behalf.
Question 4 illustrated a simple manifestation of a problem arising from the failure to define a noarg constructor that would be needed later. The reason that it was needed later was that the programmer attempted to explicitlyuse the non-existent noarg constructor to create an instance of the class.
A more subtle problem
The problem in this program is more subtle. Unless you (or the programmer of the superclasses) specifically write code to cause the system to behave otherwise, each time you instantiate an object of a class, the systemautomatically calls the noarg constructor on superclasses of that class up to and includingthe class named Object . If one or more of those superclasses don't have a noarg constructor, unless the author of the subclass constructor has taken this intoaccount, the program will fail to compile.
Calling a non-existing noarg constructor
This program attempts to instantiate an object of a class named Subclass , which extends a class named Superclass . By default, when attempting to instantiate the object, the system will attempt to call a noarg constructor defined in Superclass .
Superclass has no noarg constructor
The Superclass class defines a parameterized constructor that requires a single incoming parameter of type int . However, it does not also define a noarg constructor. Because the parameterized constructor is defined, the default noarg constructor does not exist. As a result, JDK 1.3 produces the following compiler error:
Ap094.java:40: cannot resolve symbol
symbol : constructor Superclass ()location: class Superclass
public Subclass(){
A. Compiler Error
Constructors
Java uses the following kinds of constructors:
Constructor definition is optional
You are not required to define a constructor when you define a new class. If you don't define a constructor for your new class, a default constructor will beprovided on your behalf. This constructor requires no argument, and it is typically used in conjunction with the new operator to create an instance of theclass using statements such as the following:
NewClass obj = new NewClass();
The default constructor
The default constructor typically does the following:
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?