在Java中提供了四种访问权限,使用不同的访问权限时,被修饰的内容会有不同的访问权限,以下表来说明不同权限的访问能力:
public protected 空的(default) private
同一类中 √ √ √ √
同一包中(子类与无关类) √ √ √
不同包的子类 √ √
不同包中的无关类 √
归纳一下:在日常开发过程中,编写的类、方法、成员变量的访问
要想仅能在本类中访问使用private修饰;
要想本包中的类都可以访问不加修饰符即可;
要想本包中的类与其他包中的子类可以访问使用protected修饰
要想所有包中的所有类都可以访问使用public修饰。
这里要注意的是,如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。
这里着重说说受保护权限pretected.有人说它的用法是:受保护,给子类用
下面代码说明问题:
package com.fenxiang.protecteddemo;
public classFu {
protected void pro(){
System.out.println("受保护权限的方法");
}
}
package com.fenxiang.protecteddemo;
public class Zi extends Fu{
}
package com.fenxiang.demo;
import com.fenxiang.protecteddemo.Zi;
public classDemo {
public static void main(String[]args) {
Zi z = new Zi();
z.pro(); //无法调用Pro方法
}
}
但是在这里测试类Demo中无法调用Pro方法,所以理解为”给子类用”是有问题的
下面修改后代码:
package com.fenxiang.protecteddemo;
public class Fu {
protected void pro(){
System.out.println("受保护权限的方法");
}
}
package com.fenxiang.protecteddemo;
public class Zi extends Fu{
public void show(){ //加入show方法,在show方法中调用pro方法
pro();
}
}
package com.fenxiang.demo;
import com.fenxiang.protecteddemo.Zi;
public class Demo {
public static void main(String[]args) {
Zi z = new Zi();
z.show(); //调用子类中的show方法
}
}
修改后编译成功,程序正常运行,输出:受保护权限的方法
所以得到结论:
受保护权限用法:只能在子类中去使用,出去子类,不能使用