If a class lacks the public
modifier, access to the class declaration is limited to
the package in which it is declared (§6.6). In the example:
package points;
public class Point { public int x, y; public void move(int dx, int dy) { x += dx; y += dy; } }
class PointList { Point next, prev; }
two classes are declared in the compilation unit. The class Point
is available outside the package points
, while the class PointList
is available for access only
within the package. Thus a compilation unit in another package can access
points.Point
, either by using its fully qualified name:
package pointsUser;
class Test { public static void main(String[] args) { points.Point p = new points.Point(); System.out.println(p.x + " " + p.y); } }
or by using a single-type-import declaration (§7.5.1) that mentions the fully qualfied name, so that the simple name may be used thereafter:
package pointsUser;
import points.Point;
class Test { public static void main(String[] args) { Point p = new Point(); System.out.println(p.x + " " + p.y); } }
However, this compilation unit cannot use or import points.PointList
, which
is not declared public
and is therefore inaccessible outside package points
.