类访问控制权限
- public:同包/不同包中的类可以访问
- 无修饰:同包 类可以访问
类成员访问控制权限
(能访问类成员,首先基于能访问类,不能访问不同包的"默认"类)- public(公有)
-可以被其他任何方法访问 - protected(保护)
-只可被同一类及子类方法访问 - private(私有)
-只可被同一类的方法访问
无修饰(默认)
-仅允许同一包内的访问,又称为"包(package)访问权限"
可以打个比喻,如有一位母亲有很多想法,有一部分只对自己说,藏在心里(private想法);更多一些想法会对家人表达(包访问权限想法);再多一些想法还会对自己出嫁的女儿倾诉(protected想法);再多一些想法会对外界认识的所有人说(public想法)
将实际变量设置为private
public class Circle{
static double PI =3.14159265;
private int radius;
public double circumference(){
return 2*PI*radius;
}
}
再编译CircumferenceTester.java
public class CircumferenceTester{
public static void main(String args[]){
Circle c1=new Circle();
c1.radius=50;
Circle c2=new Circle();
c2.radius=10;
double circum1=c1.circumference();
double circum2=c2.circumference();
System.out.println("Circle 1 has circumference"+circum1);
System.out.println("Circle 2 has circumference"+circum2);
}
}
编译时提示出错
在编译c1.radius=50和c2.radius=10时,提示语法错误(radius has private access in Circle)
说错误原因
Circle类中变量radius被变量声明为private,在其他类中不能直接访问radius
公有接口访问私有成员
就是通过"内鬼"接应外部(一个能访问内部,又与外部接触的方法)get方法
-[功能] 取得属性变量的值
-[命名] 以"get开头",后面是实例变量的名字
public int getRadius(){
return radius;
}
set方法
-[功能] 设置属性变量的值
-[命名] 以"set开头",后面是实例变量的名字
public void getRadius(int r){
radius=r;
}