包内包含一组类,它们被组织在一个单独的命名空间(namespace)下。
eg: 标准 Java 发布中有一个工具库,它被组织在 java.util 命名空间下。java.util 中含有一个类,叫做 ArrayList。使用 ArrayList 的一种方式是用其全名java.util.ArrayList
public class FullQualification {
public static void main(String[] args) {
java.util.ArrayList list =new java.util.ArrayList();
}
}
使用import导入,减少冗余代码
import java.util.ArrayList;
public class SingleImport {
public static void main(String[] args) {
ArrayList list = new ArrayList();
}
}
冲突:
通过 * 导入了两个包含相同名字类名的类库, 比如同时导入了sql包和util包下的Date类,在使用时如果不显示指明是哪个包下的类,而直接使用就会报错
import java.sql.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Date d=new Date();//编译报错
}
}
修改:
public class Main {
public static void main(String[] args) {
java.util.Date d1=new java.util.Date();
java.sql.Date d2=new java.sql.Date(1000);
}
}
| 修饰符 | 同一个类中 | 同一个包中(子类和无关类) | 不同包(子类) | 不同包(无关类) |
|---|---|---|---|---|
| public | √ | √ | √ | √ |
| protected | √ | √ | √ | × |
| default(默认权限、包访问权限) | √ | √ | × | × |
| public | √ | × | × | × |
在一个具有包访问权限的类中定义一个 public 的构造器并不能真的使这个构造器成为 public,在声明的时候就应该标记为编译时错误