Java Reference
In-Depth Information
If the private instance variables
name
and
hireDate
had been marked
protected
in
the class
Employee
, the definition of
toString
in the derived class
HourlyEmployee
could be simplified to the following:
public
String toString()
//Legal if instance variables in
// Employee are marked protected
{
return
(name + " " + hireDate.toString()
+ "\n$" + wageRate + " per hour for " + hours + " hours");
}
The
protected
Modifier
If a method or instance variable is modified by
protected
(rather than
public
or
private
), then it can be accessed by name inside its own class definition, by name inside
any class derived from it, and by name in the definition of any class in the same package.
The
protected
modifier provides very weak protection compared to the
private
modifier, because it allows direct access to any programmer who is willing to go
through the bother of defining a suitable derived class. Many programming authorities
discourage the use of the
protected
modifier. Instance variables should normally not
be marked
protected
. On rare occasions, you may want to have a method marked
protected
. If you want an access intermediate between
public
and
private
, then the
access described in the next paragraph is often a preferable alternative to
protected
.
You may have noticed that if you forget to place one of the modifiers
public
,
private
, or
protected
before an instance variable or method definition, then your
class definition will still compile. If you do not place any of these modifiers before
an instance variable or method definition, then the instance variable or method can
be accessed by name inside the definition of any class in the same package, but not
outside of the package. This is called
package access
,
default access
, or
friendly access
.
Use package access in situations where you have a package of cooperating classes that act
as a single encapsulated unit. Note that package access is more restricted than
protected
,
and that package access gives more control to the programmer defining the classes. If you
control the package directory (folder), then you control who is allowed package access.
The diagram in Display 7.9 may help you to understand who has access to members
with public, private, protected, and package access. The diagram tells who can directly
access, by name, variables that have public, private, protected, and package access. The
same access rules apply to methods that have public, private, protected, and package access.