The JavaTM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form

Trail: Learning the Java Language
Lesson: Classes, Interfaces, and Packages

## 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
> - refer to the member by its long (disambiguated) name,
> - import the package member, or
> - import the member's entire package.
> 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`). Such 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:

> - The default package (the package with no name)
> - The `java.lang` package
> - The current package

### 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;

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form