包(Package)
- 创建自己的包时,要求 package语句必须是文件中的第一个“非注释”代码。
- 如果类名冲突时,可这样写java.util.Vector v = new java.util.Vector();
- 可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。
访问控制
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
下面是代码解释
//PackageClass.java
package com.fatkun.util;
/**
* 在包com.fatkun.util内,分别有a,b,c,d四个变量,它们的修饰符都不一样。
* @author fatkun
*
*/
public class PackageClass {
private int a;
int b;
protected int c;
public int d;
public static void main(String[] args) {
PackageClass p = new PackageClass();
System.out.println(p.a);
System.out.println(p.b);
System.out.println(p.c);
System.out.println(p.d);
new InsideClass();
}
}
class InsideClass {
}
//AnotherPackageClass.java
package com.fatkun.util;
/**
* 同一个包内的类,private的不能访问
* @author fatkun
*
*/
public class AnotherPackageClass {
public static void main(String[] args){
PackageClass p = new PackageClass();
System.out.println(p.a);//private只能在类内部访问
System.out.println(p.b);
System.out.println(p.c);
System.out.println(p.d);
//内部类在同一个包内可以访问
new InsideClass();
}
}
//ExtendClass.java
import com.fatkun.util.*;
/**
* PackageClass的子类
* @author fatkun
*
*/
public class ExtendClass extends PackageClass {
public static void main(String[] args) {
ExtendClass e = new ExtendClass();
System.out.println(e.a);//private只能在类内部访问
System.out.println(e.b);//default只能在类内部和同一个包内访问
System.out.println(e.c);//protect能在子类访问
System.out.println(e.d);
//内部类在子类不可以访问
new InsideClass();
}
}
//DefaultClass.java
import com.fatkun.util.*;
/**
* 不同包内
* @author fatkun
*
*/
public class DefaultClass {
public static void main(String[] args) {
PackageClass p = new PackageClass();
System.out.println(p.a);//private只能在类内部访问
System.out.println(p.b);//default只能在类内部和同一个包内访问
System.out.println(p.c);//protect只能在类内部、同一个包、子类访问
System.out.println(p.d);//public能在任何地方访问
//内部类在不同包内不可以访问
new InsideClass();
}
}