5.10. Controlling Access to Class Members
I have not yet discussed in any detail how you control the accessibility of class members from outside the class—from a method in another class in other words. You know that you can refer to any of the static members of the same class in the code for a static class method, and a non-static method can refer to any member of the same class. The degree to which variables and methods within one class are accessible from other classes is a bit more complicated. It depends on what access attributes you have specified for the members of a class, whether the classes are in the same package, and whether you have declared the class as public. This is why you had to understand packages first.
5.10.1. Using Access Attributes
Let's start by considering classes that are in the same package. Within a given package, any class has direct access to any other class name in the same package—for declaring variables or specifying method parameter types, for example—but the variables and methods that are members of that other class are not necessarily accessible. The accessibility of these is controlled by access attributes. The name of a class in one package can be accessed from a class in another package only if the class to be accessed is declared as public. Classes not declared as public can be accessed only by classes within the same package.
You have four possibilities when specifying an access attribute for a class member, and each possibility has a ...