Java的访问控制
包(Package)
- 创建自己的包时,要求 package语句必须是文件中的第一个“非注释”代码。
- 如果类名冲突时,可这样写java.util.Vector v = new java.util.Vector();
- 可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。
访问控制
|
修饰符 |
类内部 |
同一个包 |
子类 |
任何地方 |
|
private |
√ |
|||
|
default |
√ |
√ |
||
|
protected |
√ |
√ |
√ |
|
|
public |
√ |
√ |
√ |
√ |
类的修饰符只有public 和 default,默认时只能被同一个文件或包内访问。
下面是代码解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //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 { } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //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(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //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(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //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(); } } |
不懂…………
@aisinvon, 嘿嘿~术有专攻
暂时没时间看,等等再来看