java中访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限。
类的访问控制符只能是空或者 public,方法和属性的访问控制符有 4 个,分别是 public、 private、protected 和 friendly,其中 friendly 是一种没有定义专门的访问控制符的默认情况。访问控制修饰符的权限如下表所示。
访问范围 | public | protected | friendly(默认) | private |
---|---|---|---|---|
同一个类中 | 允许 | 允许 | 允许 | 允许 |
同一个包(package)下的不同类中 | 允许 | 允许 | 允许 | 不允许 |
不同包下的子类 | 允许 | 允许 | 不允许 | 不允许 |
不同包下的非子类 | 允许 | 不允许 | 不允许 | 不允许 |
访问控制在面向对象技术中处于很重要的地位,合理的使用访问控制符,可以通过降低类和类之间的**耦合性(关联性)**来降低整个项目的复杂度,也便于整个项目的开发和维护。具体的实现就是通过访问控制符将类中会被其它类调用的内容开放出来,而把不希望别人调用的内容隐藏起来,这样一个类开放的信息变得比较有限,从而降低了整个项目开放的信息。
看一下下面的实例:
public class Phone {
public String color;//公有变量——手机颜色
protected int price;//protected变量——手机价格
String size;//默认访问权限的变量——手机大小
private String model;//私有变量——手机型号。
void show() {
System.out.println("my phone color:"+color+",size:"+size+",price :"+price+",phone model:"+model);
}
}
public class Myphone {
public static void main(String[] args) {
Phone mp = new Phone();
mp.color = "white";
mp.price = 958;
mp.size = "4.7英寸";
// mp.model = "meizu note6";
mp.show();
}
}
这两个类Phone和Myphone实在同一个包下的,对于Phone类中的四个属性,控制修饰符分别为public、protected、friendly、private,同时还有一个控制修饰符为friendly的方法show。
在Myphone这个类中创建Phone的对象mp,并初始化其属性,因为实在同一个包下,前三个属性均可以被访问到,而对于被private修饰的model,则无法访问,因此代码里将其注释掉才可运行。
这是报错的情况: 报错信息指出:The field Phone.model is not visible,说明在同一个包下的不同类中,被private修饰的属性(还有方法)不可以被访问到。
注释掉后的运行结果如下: