课时105:访问控制权限
1.1面对对象开发的三大特点
在面向对象的开发过程中有三大主要特点:封装、继承、多态。
(1)封装:不仅仅是属性封装还包括结构封装,还牵动着访问权限的问题。
(2)继承:围绕抽象位接口展开。
(3)多态:可以实现参数的统一。
对于封装性而言主要的实现依靠的就是访问控制权限,而访问控制权限在程序之中一共定义有四种: Private、Default(什么都不写)、Protected、Public,这四种权限的作用如下:
No |
访问范围 |
Private |
Default |
Protected |
Public |
1 |
同一包的同一类 |
√ |
√ |
√ |
√ |
2 |
同一包的不同类 |
|
√ |
√ |
√ |
3 |
不同包的子类 |
|
|
√ |
√ |
4 |
不同包的所有类 |
|
|
|
√ |
在整个访问控制权限的处理之中,只有 Protected (受保护)的权限是比较新的概念。
下面对访问权限的使用说明,本次定义两个类:
(1)cn.mldn.a.Message
类:提供有 Protected 访问权限;
(2) cn.mldn.b.NetMessage
类:将直接访问 Protected 属性
1.2定义 Message 类
package cn.mlden.a ; public class Message { protected String info = "ww.mldn.cn" ; }
追加 Protected 访问权限
1.3定义子类,与父类不在同一个包中
package cn.mlden.b ; import cn.mlden.a.Message ; public class NetMessage extends Message { public void print() { System.out.println(super.info) ; } }
定义子类NetMessage,对 Info 进行访问。
1.4编写测试类,通过子类实现操作
package cn.mldn.test ; import cn.mldn.b.* ; public class TestMessage { public static void main(String args[]) { new NetMessage().print() ; } }
这个程序是通过子类访问了父类中的Protected属性。如果此时你直接通过了Message访问 Info 属性,那么就将出现错误的提示。
程序运行结果:
1.5在测试类中直接访问 Message
package cn.mldn.test ; import cn.mldn.a.* ; public class TestMessage { public static void main(String args[]) { System.out.println(new Message().info) ; } }
TestMessage.java:5
: 错误:Info可以在Message中访问Protected。
程序运行结果:
在程序之中的封装一共有三个对应的访问权限: Private 、 Default(一般不用)、 Protected ,但是如果每次在使用的时候进行区分会比较麻烦,所有可以给出一个参考的选择方案(90%的设计问题):
(1)只要是进行属性的定义,全部使用Private;
(2)只要是进行方法的定义,全部使用Public。
能解决90%的设计问题,有些时候要根据实际情况进行调整,根据代码的运行过程、环境来进行动态的调整。