Java Reference
In-Depth Information
TIP: (continued)
Assuming that the equals method for both Employee and HourlyEmployee are defined
using instanceof (as above), consider the following situation:
Employee e =
new Employee("Joe Worker", new Date("January", 1, 2004));
HourlyEmployee hourlyE = new HourlyEmployee("Joe Worker",
new Date("January", 1, 2004), 50.50, 160);
Then, with the definition of equals that uses instanceof , we get that
e.equals(hourlyE)
returns true , because hourlyE is an Employee with the same name and hire date as e . So
far, it sounds reasonable.
However, since we are assuming that we also used instanceof in the definition of
equals for the class HourlyEmployee , we also get that
hourlyE.equals(e)
returns false because e instanceof HourlyEmployee returns false . ( e is an Employee
but e is not an HourlyEmployee .)
So, if we define equals in both classes using instanceof , then e equals hourlyE , but
hourlyE does not equal e . And, that's no way for equals to behave.
Since instanceof does not yield a suitable definition of equals , you should instead
use getClass() as we did in Display 7.10. If we use getClass() in a similar way in the
definition of equals for the class HourlyEmployee ( see Self-Test Exercise 19), then
e.equals(hourlyE)
and
hourlyE.equals(e)
both return false .
Search WWH ::




Custom Search