Java Reference
In-Depth Information
public
and
private
Modifiers
Compare the instance variables in Displays 4.1 and 4.2 . In Display 4.1 , each instance
variable is prefaced with the modifier
public
. In Display 4.2 , each instance variable
is prefaced with the modifier
private
. The modifier
public
means that there are no
restrictions on where the instance variable can be used. The modifier
private
means
that the instance variable cannot be accessed by name outside of the class definition.
For example, the following would produce a compiler error message if used in a
program:
public
private
DateSecondTry date =
new
DateSecondTry();
date.month = "January";
date.day = 1;
date.year = 2006;
In fact, any one of the three assignments would be enough to trigger a compiler error.
This is because, as shown in Display 4.2, each of the instance variables
month
,
day
, and
year
is labeled
private
.
If, on the other hand, we had used the class
DateFirstTry
from Display 4.1
instead of the class
DateSecondTry
in the preceding code, the code would be legal and
would compile and run with no error messages. This is because, in the definition of
DateFirstTry
(Display 4.1), each of the instance variables
month
,
day
, and
year
is
labeled
public
.
It is considered good programming practice to make all instance variables private.
As we will explain a little later in this chapter, this is intended to simplify the task of
any programmer using the class. But before we say anything about how, on balance,
this simplifies the job of a programmer who uses the class, let's see how it complicates
the job of a programmer who uses the class.
Once you label an instance variable as
private
, there is then no way to change its
value (nor to reference the instance variable in any other way) except by using one of
the methods belonging to the class. Note that even when an instance variable is private,
you can still access it through methods of the class. For the class
DateSecondTry
, you
can change the values of the instance variables with the method
readInput
, and you
can obtain the values of the instance variables with the methods whose names start
with
get
. So, the qualifier
private
does not make it impossible to access the instance
variables. It just makes it illegal to use their names, which can be a minor nuisance.
The modifiers
public
and
private
before a method definition have a similar
meaning. If the method is labeled
public
, there are no restrictions on its usage. If
the method is labeled
private
, the method can only be used in the definition of
another method of the same class.
Any instance variable can be labeled either
public
or
private
. Any method can
be
public
or
private
. However, normal good programming practices require that
all
instance variables be private and that typically, most methods be public. Normally, a
method is private only if it is being used solely as a helping method in the definition of
other methods.