- Make classes as restricted as possible
- 2 top level access modifiers a. Public b. Package Private
- Prefer final classes unless explicitly required
- If a package-private top-level class or interface is used by only one class, consider making the top-level class a private static nested class of the sole class that uses it
For members (fields, methods, nested classes, and nested interfaces), there are four possible access levels
- private—The member is accessible only from the top-level class where it is declared.
- package-private—The member is accessible from any class in the package where it is declared.
- protected—The member is accessible from subclasses of the class where it is declared and from any class in the package where it is declared.
- public—The member is accessible from anywhere.