在之前所学到的private就属于一种访问控制权限,而这种访问控制权限只是封装的一部分,
在java里面提供有四种访问控制权限
private、default、protected、public.而四种访问控制权限定义如下:
no | 范围 | private | default | protected | public |
1 | 同一包中的同一类 | ✔ | ✔ | ✔ | ✔ |
2 | 同一包中的不同类 |
| ✔ | ✔ | ✔ |
3 | 不同包中的子类 |
|
| ✔ | ✔ |
4 | 不同包中的非子类 |
|
|
| ✔ |
实际上public永远都可以访问,但是对于封装而言主要是由三个权限:private、default、protected
范例:观察protected访问权限。
定义一个Info类 放在 cn.mldn.demo.a包中
package cn.mldn.demo.a;
public class Info{
//此时出现的是一个protected访问权限
protected String str="123";
}
范例:定义另外一个包进行该类的继承
package cn.mldn.demo.b;//不同包
import cn.mldn.demo.a.Info;
//不同包的子类
public class SubInfo extends Info{//Info的子类
public void print(){
System.out.pirntln(super.str);//在父类中属于protected的权限
}
}
范例:定义测试程序类
package cn.mldn.testab;
import cn.mldn.demo.b.SubInfo;
public class TestInfo{
public static void main(String args[]){
new SubInfo().print();
}
}
现在SubInfo虽然与Info属于不同的开发包,但是毕竟是其子类,所以可以访问,但是反过来,如果想要在TestInfo中使用Info类(非子类)则就会出现错误。
范例:错误的程序
package cn.mldn.testab;
import cn.mldn.demo.a.Info;
public class TestDemo{
public static void main(String args[]){
System.out.println(new Info().str)}}
str是protected是权限,所以此处一定无法访问 因为protected权限无法在非同包非子类中使用。
结论:关于权限选择
·对于封装的描述90%使用的是private、只有10%的情况下会使用protected,这两种都会叫封装;
·属性都使用private,方法都使用public。
封装性就是指private、default、protected三个权限的使用。
熟记上面的表即可