Every
object contains the instance variables of its class. What isn't so obvious is
that every object also has all the instance variables of all super classes
(parent class, grandparent class, etc). These super class variables must be
initialized before the class's instances variables.
Automatic insertion of super class constructor call
When an
object is created, it's necessary to call the constructors of all super classes
to initialize their fields. Java does this automatically at the beginning if
you don't.
public Point(int xx, int yy) {
super(); // Automatically
inserted
x = xx;
y = yy;
}
Explicit call to superclass constructor
Normally,
you don't explicitly write the constructor for your parent class, but there are
two cases where this is necessary:
- Passing parameters. You want to call a parent constructor which has parameters (the default construct has no parameters). For example, if you are defining a subclass of JFrame you might do the following.
·
class
MyWindow extends JFrame {
·
. . .
·
//======== constructor
·
public MyWindow(String title) {
·
super(title);
·
. . .
In the above example you wanted to make use of the JFrame constructor that takes a title
as a parameter. It would have been simple to let the default constructor be
called and use a setter method as an alternative.
class MyWindow extends JFrame {
. . .
//======== constructor
public
MyWindow(String title) {
//
Default superclass constructor call automatically inserted.
setTitle(title); // Calls method
in superclass.
. . .
- No parameterless constructor. There is no parent constructor with no parameters. Sometimes is doesn't make sense to create an object without supplying parameters. For example, should there really be a Point constructor with no parameters? Altho the previous example (see Constructors) did define a parameterless constructor to illustrate use of this, it probably isn't a good idea for points.
No comments:
Post a Comment