Java Reference
In-Depth Information
This version, which we did use, makes the instance variable
this.born
an independent
Date
object that represents the same date as
original.born
. So if you change a date
in the
Person
object created by the copy constructor, you will not change that date in
the
original Person
object.
Note that if a class, such as
Person
, has instance variables of a class type, such as the
instance variables
born
and
died
, then to define a correct copy constructor for the class
Person
, you must already have copy constructors for the class
Date
of the instance
variables. The easiest way to ensure this for all your classes is to always include a copy
constructor in every class you define.
Copy Constructor
A
copy constructor
is a constructor with one parameter of the same type as the class.
A copy constructor should be designed so the object it creates is intuitively an exact copy of
its parameter, but a completely independent copy. See Displays 5.19 and 5.20 for examples
of copy constructors.
clone
The Java documentation says to use a method named
clone
instead of a copy
constructor, and, as you will see later in this topic, there are situations where the copy
constructor will not work as desired and you need the
clone
method. However, we
do not yet have enough background to delve into this method.(It is discussed later
in this topic in Chapters 8 and 13 .) Despite the Java documentation, many excellent
programmers prefer to sometimes use copy constructors. In this topic, we will use both
copy constructors and the clone method.
PITFALL: Privacy Leaks
Consider the accessor method
getBirthDate
for the class
Person
( Display 5.19 ),
which we reproduce in what follows:
leaking
accessor
methods
public
Date getBirthDate()
{
return new
Date(born);
}
Do not make the mistake of defining the accessor method as follows:
public
Date getBirthDate()
//Unsafe
{
return
born;
//Not good
}
(continued)