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

## Creating a Package

> To create a package, you simply put a class or interface in it. To do this, you put a `package` statement at the top of the source file in which the class or interface is defined. For example, the following code appears in the source file `Circle.java` and puts the Circle class in the `graphics` package:

> >     package graphics;

> >     public class Circle extends Graphic implements Draggable {
> >         . . .
> >     }

> The `Circle` class is a public member of the `graphics` package.

> You must include a `package` statement at the top of every source file that defines a class or interface that is to be a member of the `graphics` package. So you would also include the statement in `Rectangle.java` and so on:

> >     package graphics;

> >     public class Rectangle extends Graphic implements Draggable {
> >         . . .
> >     }

> The scope of the package statement is the entire source file, so all classes and interfaces defined in `Circle.java` and `Rectangle.java` are also members of the `graphics` package. If you put multiple classes in a single source file, only one may be declared public and it must share the name of the source file's basename. Only public package members are accessible from outside the package.

> > Note: Some compilers might allow more than one public file per `.java` file. However, we recommend that you use the one-public-class-per-file convention, since it makes public classes easier to find and works for all compilers.

> If you do not use a `package` statement, your class or interface ends up in the default package, which is a package that has no name. Generally speaking, the default package is only for small or temporary applications or when you are just beginning development. Otherwise, classes and interfaces belong in named packages.

### Naming a Package

> With programmers all over the world writing Java classes and interfaces, it is conceivable and even likely that two programmers will use the same name for two different classes. In fact, the previous example does just that: It defines a `Rectangle` class when there is already a `Rectangle` class in the `java.awt` package. Yet, the compiler allows both classes to have the same name. Why? Because they are in different packages and the actual name of each class includes the package name. That is, the name of the `Rectangle` class in the `graphics` package is really `graphics.Rectangle`, and the name of the `Rectangle` class in the `java.awt` package is really `java.awt.Rectangle`.

> This works just fine unless two independent programmers use the same name for their packages. What prevents this? Convention.

> > By Convention: Companies use their reversed Internet domain name in their package names, like this: `com.company.package`. Name collisions that occur within a single company need to be handled by convention within that company, perhaps by including the region or project name after the company name, for example, `com.company.region.package`.

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