权限修饰符主要是用于限定外部访问类、类属性和类方法的访问权限。权限修饰符有default、public、private、protect,这些修饰符的访问权限如下表所示。

在上面的访问权限规则表中。
default是默认访问权限,当我们在类中声明成员变量或成员方法时,如果不添加访问权限修饰符,默认的就是default权限。default权限允许同一个类、以及同一个包中的类、同包子类访问成员变量和方法。
public权限是公有权限,它允许同一个类、同一包下的类、同包子类、其它包的类都可以访问成员变量和方法。
private权限是私有权限,它只允许同一个类来访问成员变量和方法。
protect权限主要用于子类访问权限的控制,它允许同一个类、同一个包的类和同包子类访问成员变量和方法。
理解访问权限的作用
在PbaseUnit13项目sample包下创建Circle类,定义成员变量PI(圆周率)和radius(半径),成员变量使用private权限修饰符修饰。代码如下:
/**
* @Title: Circle.java
* @Package sample
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package sample;
/**
* @ClassName: Circle
* @Description: 类(权限修饰符)案例
* @author 编程训练营
* @date
*
*/
public class Circle {
/**
* @Fields π属性
*/
private double PI = 3.14;
/**
* @Fields 半径属性
*/
double radius;
/**
* @return the radius
*/
public double getRadius() {
return radius;
}
/**
* @param radius the radius to set
*/
public void setRadius(double radius) {
this.radius = radius;
}
}在PbaseUnit13项目sample包下创建Manage类,Manager类要有main函数入口。代码如下:
/**
* @Title: Manage.java
* @Package sample
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package sample;
/**
* @ClassName: Manage
* @Description: 类(权限修饰符)案例
* @author 编程训练营
* @date
*
*/
public class Manage {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
Circle cirlce = new Circle();
System.out.println(cirlce.PI);
System.out.println(cirlce.radius);
}
}在Manage类的main方法里,用new运算符实例化Circle类为cirlce对象,并应用cirlce对象直接访问对象的成员变量PI和radius。因为PI用权限修饰符private修饰,外部类不能直接访问cirlce对象的成员变量PI,因此上面的代码是有错误,编译不能通过(见下图)。但外部类可以直接访问cirlce对象的成员变量radius,因为radius是默认访问权限,默认访问权限允许同一个类、以及同一个包中的类、同包子类访问成员变量和方法。
上图中,标有红色叉号的第34条语句就是出错的语句,语句出错的地方用红色波浪线标出,标出的就是Circle类的PI属性。将鼠标移动到PI区域,eclipse会给出错误提示,错误提示如下图所示:

错误意思是PI属性对外部不可见,需要修改PI属性的可见性。
有两种方法可以解决上面的错误:
第一种方法是将PI属性的访问权限修改为public或default权限;
第二种方法是添加PI属性的get和set方法。