The JavaTM Tutorial

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

Trail: Learning the Java Language
Lesson: 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 do one or more of the following:
> - Refer to the member by its long (qualified) name
> - Import the package member
> - Import the members 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 tutorial have referred to classes and interfaces by their simple names, such as `Rectangle` and `StockWatcher`. You can use a package members simple name if the code you are writing is in the same package as that member or if the members package has been imported.

> However, if you are trying to use a member from a different package and that package has not been imported, you must use the members qualified name, which includes the package name. This is the qualified 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 simple name:

> >     Circle myCircle = new Circle();

> This approach works well if you use just a few members from the `graphics` package. But if you use many classes and interfaces from a package, you can import the entire package.

### Importing an Entire Package

> To import all 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 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 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 two entire packages:

> - The `java.lang`package
> - The current package by default

### 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 each member by its qualified 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, the following is ambiguous:

> >     Rectangle rect;

> In such a situation, you have to be more specific and use the members qualified name to indicate exactly which `Rectangle` class you want:

> >     graphics.Rectangle rect;

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

Copyright 1995-2004 Sun Microsystems, Inc. All rights reserved.