# 创建和使用包

> 原文： [https://docs.oracle.com/javase/tutorial/java/package/packages.html](https://docs.oracle.com/javase/tutorial/java/package/packages.html)

为了使类型更易于查找和使用，避免命名冲突和控制访问，程序员将相关类型的组捆绑到包中。

* * *

**Definition:** A _package_ is a grouping of related types providing access protection and name space management. Note that _types_ refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so _types_ are often referred to in this lesson simply as _classes and interfaces_.

* * *

作为 Java 平台一部分的类型是按功能捆绑类的各种包的成员：基本类在`java.lang`中，读写类（输入和输出）在`java.io`中，依此类推。您也可以将类型放入包中。

假设您编写了一组表示图形对象的类，例如圆形，矩形，直线和点。您还可以编写一个接口`Draggable`，如果可以使用鼠标拖动类，则可以实现这些接口。

```
//in the Draggable.java file
public interface Draggable {
    ...
}

//in the Graphic.java file
public abstract class Graphic {
    ...
}

//in the Circle.java file
public class Circle extends Graphic
    implements Draggable {
    . . .
}

//in the Rectangle.java file
public class Rectangle extends Graphic
    implements Draggable {
    . . .
}

//in the Point.java file
public class Point extends Graphic
    implements Draggable {
    . . .
}

//in the Line.java file
public class Line extends Graphic
    implements Draggable {
    . . .
}

```

您应该将这些类和接口捆绑在一个包中，原因有多种，包括：

*   您和其他程序员可以轻松确定这些类型是否相关。
*   您和其他程序员知道在哪里可以找到可以提供与图形相关的功能的类型。
*   类型的名称不会与其他包中的类型名称冲突，因为包会创建新的命名空间。
*   您可以允许程序包中的类型对彼此具有不受限制的访问权限，但仍限制对程序包外部类型的访问。