Java Reference
In-Depth Information
PITFALL: (continued)
On the other hand, both the class
Employee
and the class
HourlyEmployee
define a
method with the following method heading:
public
String toString()
In this case, the class
HourlyEmployee
has only one method named
toString()
, but
the definition of the method
toString()
in the class
HourlyEmployee
is different
from the definition of
toString()
in the class
Employee
; the method
toString()
has been
overridden
(that is, redefined).
If you get overriding and overloading confused, you do have one consolation. They
are both legal.
■
The
super
Constructor
You can invoke a constructor of the base class within the definition of a derived class
constructor. A constructor for a derived class uses a constructor from the base class in
a special way. A constructor for the base class normally initializes all the data inherited
from the base class. So a constructor for a derived class begins with an invocation of a
constructor for the base class. The details are described next.
There is a special syntax for invoking the base class constructor that is illustrated by
the constructor definitions for the class
HourlyEmployee
given in Display 7.3 . In what
follows, we have reproduced the beginning of one of the constructor definitions for the
class
HourlyEmployee
taken from that display:
public
HourlyEmployee(String theName, Date theDate,
double
theWageRate,
double
theHours)
{
super
(theName, theDate);
if
((theWageRate >= 0) && (theHours >= 0))
{
wageRate = theWageRate;
hours = theHours;
}
else
...
The line
super
super
(theName, theDate);
is a call to a constructor for the base class, which in this case is a call to a constructor for
the class
Employee
.