Java Reference
In-Depth Information
PITFALL: (continued)
Because dateName contains the same reference as the private instance variable born of
the object personObject , changing the year part of dateName changes the year part of
the private instance variable born of personObject . Not only does this bypass the
consistency checks in the mutator method setBirthDate , but it also is a likely source
of an inadvertent change to the born instance variable.
If we define setBirthDate as we did in Display 5.19 and as shown below, this
problem does not happen. (If you do not see this, go through the code step by step
and trace what happens.)
public void setBirthDate(Date newDate)
{
if (consistent(newDate, died))
born = new Date(newDate);
. . .
One final word of warning: Using copy constructors as we have been doing is not the
officially sanctioned way to make copies of an object in Java. The officially sanc-
tioned way to create copies of an object is to define a method named clone . We will
discuss clone methods in Chapters 8 and 13. In Chapter 8 we show you that, in
some situations, there are advantages to using a clone method instead of a copy con-
structor. In Chapter 13 we describe the officially sanctioned way to define the clone
method. For what we will be doing until then, a copy constructor will be a very ade-
quate way of creating copies of an object.
clone
Self-Test Exercises
38. What is a copy constructor?
39. What output is produced by the following code?
Date date1 = new Date("January", 1, 2006);
Date date2;
date2 = date1;
date2.setDate("July", 4, 1776);
System.out.println(date1);
What output is produced by the following code? Only the third line is different
from the previous case.
Date date1 = new Date("January", 1, 2006);
Date date2;
date2 = new Date(date1);
date2.setDate("July", 4, 1776);
System.out.println(date1);
Search WWH ::




Custom Search