Java访问权限一共有四种,他们之间的访问权限比较通过以下一组例子来解释
例子code:ModiferDemo.java
package com.glust.blog.j2se;
public class ModiferDemo{
//四种访问权限的变量(属性)
private int a;
int b;//friendly
protected int c;
public int d;
//访问属性的接口
public int getA(){
return a;
}
public void setA(int a){
this.a = a;
}
}
例子testCode1: TestModiferDemo1.java
import com.glust.blog.j2se.ModiferDemo;
class TestModiferDemo1{
public static void main(String[] args){
ModiferDemo obj = new ModiferDemo();
System.out.println(" a is " + obj.a);//error,private访问权限只能在类体中可见
System.out.println(" b is " + obj.b);//error,friendly
System.out.println(" c is " + obj.c);//error,protected
System.out.println(" d is " + obj.d);
}
}
例子testCode2: TestModiferDemo2.java
import com.glust.blog.j2se.ModiferDemo;
class TestModiferDemo2 extends ModiferDemo{
public static void main(String[] args){
ModiferDemo obj = new ModiferDemo();
System.out.println(" a is " + obj.a);//error!private访问权限只能在类体中可见
System.out.println(" b is " + obj.b);//error!friendly访问权限同包中的其他类可以访问
System.out.println(" c is " + obj.c);//正确!protected访问权限,子类中可以访问
System.out.println(" d is " + obj.d);
}
}
例子testCode3: TestModiferDemo3.java
package com.glust.blog.j2se;
import com.glust.blog.j2se.ModiferDemo;
class TestModiferDemo3{
public static void main(String[] args){
ModiferDemo obj = new ModiferDemo();
System.out.println(" a is " + obj.a);//error!private访问权限只能在类体中可见
System.out.println(" b is " + obj.b);//正确!friendly访问权限同包中的其他类可以访问
System.out.println(" c is " + obj.c);//protected访问权限,同包中的其他类也可以访问
System.out.println(" d is " + obj.d);
}
}
例子testCode4: TestModiferDemo4.java
package com.glust.blog.j2se;
import com.glust.blog.j2se.ModiferDemo;
class TestModiferDemo4{
public static void main(String[] args){
ModiferDemo obj = new ModiferDemo();
System.out.println(" a is " + obj.getA());//正确!通过接口访问private权限的属性
System.out.println(" b is " + obj.b);//正确!friendly访问权限同包中的其他类可以访问
System.out.println(" c is " + obj.c);//protected访问权限,同包中的其他类也可以访问
System.out.println(" d is " + obj.d);
}
}
有上面的一组例子可知四种访问权限的访问范围如下表
访问权限使用的一般规则
1、属性一般都设为private,信息隐藏原则;希望被继承的子类中访问的设为protected;同包的其他类访问的设为friendly;一般不设为public。接口中的属性天然就是public!
2、为属性提供接口,public访问权限的方法:——获取属性,即读:getXxx();设置属性,即写:setXxx(type arg)。
3、方法,若为类内部调用的方法,设为private。其他应设为public
4、类的访问权限只能是public,or friendly,但是内隐类的访问权限四种均可。同一个文件中有多个类时,只有一个类为public类(该类类名与文件同名,大小写一致),其他类都为friendly权限。