首先通过一张表格一览Java访问控制修饰符的概括。
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
public
public修饰符的权限最大,它可以修饰类,接口,变量和方法且对所有类可见。
proteced
protected可以修饰变量和方法,对同一包内均可见。若是不同包内的子类,可访问子类实例的protected方法。
package p2;
class MyObject2 {
protected Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
package p22;
public class Test2 extends MyObject2
{
public static void main(String args[])
{
MyObject2 obj = new MyObject2();
obj.clone(); // Compile Error ----(1)
Test2 tobj = new Test2();
tobj.clone(); // Complie OK ----(2)
}
}
default
default可修饰类,接口,变量和方法,对同一包内可见。
private
private可修饰变量和方法,同一类内可见。