Previous | Next | Trail Map | Learning the Java Language | More Features of the Java Language

Using Package Members

Only public package members are accessible outside the package in which they are defined. To use a public package member from outside its package, you must either Each is appropriate for different situations, as explained in the following sections.

Referring to a Package Member by Name

So far, the examples in this book have referred to classes and interfaces by the name specified in their declaration (such as Rectangle, AlarmClock, and Sleeper). uch names are called short names. You can use a package member's short name if the code you are writing is in the same package as that member or if the member's package has been imported.

However, if you are trying to use a member from a different package and that package has not been imported, then you must use the member's long name, which includes the package name. This is the long name for the Rectangle class declared in the graphics package in the previous example:

graphics.Rectangle
You could use this long name to create an instance of graphics.Rectangle:
graphics.Rectangle myRect = new graphics.Rectangle();
You'll find that using long names is okay for one-shot uses. But you'd likely get annoyed if you had to write graphics.Rectangle again and again. Also, your code would get very messy and difficult to read. In such cases, you can just import the member instead.

Importing a Package Member

To import a specific member into the current file, put an import statement at the beginning of your file before any class or interface definitions (but after the package statement, if there is one). Here's how you would import the Circle class from the graphics package created in the previous section:
import graphics.Circle;
Now you can refer to the Circle class by its short name:
Circle myCircle = new Circle();
This approach works just fine if you use just a few members from the graphics package. But if you use many classes and interfaces from a package, you really just want to import the whole package and forget about it.

Importing an Entire Package

To import all of the classes and interfaces contained in a particular package, use the import statement with the asterisk * wildcard character:
import graphics.*;
Now you can refer to any class or interface in the graphics package by its short name:
Circle myCircle = new Circle();
Rectangle myRectangle = new Rectangle();
The asterisk in the import statement can be used only to specify all of the classes within a package, as shown here. It cannot be used to match a subset of the classes in a package. For example, the following does not match all of the classes in the graphics package that begin with "A":
import graphics.A*;	// does not work
Instead, it generates a compiler error. With the import statement, you can import only a single package member or an entire package.

For your convenience, the Java runtime system automatically imports three packages for you:

Disambiguating a Name

If by some chance a member in one package shares the same name with a member in another package and both packages are imported, you must refer to the member by its long name. For example, the previous example defined a class named Rectangle in the graphics package. The java.awt package also contains a Rectangle class. If both graphics and java.awt have been imported, then the following is ambiguous:
Rectangle rect;
In such a situation, you have to be more specific and indicate exactly which Rectangle class you want by using the member's long name:
graphics.Rectangle rect;


Previous | Next | Trail Map | Learning the Java Language | More Features of the Java Language