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