关于访问权限的问题
来源:互联网 发布:linux more 中查找 编辑:程序博客网 时间:2024/05/01 22:07
提一个问题,什么叫访问权限?问题看似简单,却很难回答准确,就拿protected关键字做例子说明一下:
首先,在com.zp.test包下面定义一个父亲类:
package com.zp.test;public class Father {public void eat(){System.out.println("在吃饭");}protected void smoke() {System.out.println("在吸烟");}}再定义一个儿子类,和父亲类在同一个包下,而且继承父亲类:
package com.zp.test;public class Son extends Father {}
我们可以知道,除了父类中的私有方法、私有属性和构造方法,其他的方法和属性子类是都可以继承的,再定义一个测试类,和父亲类跟儿子类在同一个包下:
package com.zp.test;public class Test {public static void main(String[] args) {Son s = new Son();s.eat();s.smoke();}}我们可以知道,这个测试类运行是没有问题的,eat方法和smoke方法都可以访问,现在做一点改变,把测试类移动到com.zp包下面,程序还能正常运行吗?
package com.zp;import com.zp.test.Son;public class Test {public static void main(String[] args) {Son s = new Son();s.eat();//s.smoke();}}问题出现了,eat方法可以访问,但是smoke方法是访问不了的。有人要说了,Son是Father的子类,可以调用Father中的非私有属性和方法,为什么在上一个测试类中可以访
问,在这个测试类中就访问不了呢,其实我们要说一下,类的访问权限的定义。类的访问权限指的是,方法(属性)的提供者和调用地点的关系。不光是和调用者有关系,和
调用地点也有关系。在例子中我们可以看到,都是Son的引用去调用Father类中的方法,一次是在同包中调用,可以;而另一次是在不同包中调用,就不可以了。这也间接地
解释了protected关键字的权限范围,本类,同包类,非同包子类,这个范围指的是有protected关键字修饰的方法或属性的调用地点的范围,第二个测试类中,该测试类与
Father类既不是同包关系,也不是非同包子类关系,所以就不能访问了。而第一个测试类虽然和Father类不是继承关系,但是是同包类,所以可以访问。
- 关于访问权限的问题
- 关于NTFS文件系统的访问权限问题
- 关于C++ private的访问权限问题
- 关于Java访问修饰符、访问权限的问题
- 关于php的魔术方法访问权限的问题
- 关于win2003中访问被拒绝的权限问题
- 关于Applet利用数字签名获得本地访问权限的问题
- 关于OWC11组件访问AS数据的权限问题
- 关于Applet利用数字签名获得本地访问权限的问题
- 关于APACHE 无权限访问的问题 403 解决方案
- 关于ssh证书访问git仓库时的权限问题
- 关于adb命令没有权限访问手机设备的问题
- 关于访问权限控制的几点问题
- 关于华为手机访问本地的权限问题
- 关于修改mysql远程访问权限的问题
- 关于JSP页面访问权限问题
- 关于Java中的default访问权限问题
- 关于private、protected、public访问权限问题
- U大师U盘装系统——安装ghost系统教程(V1.2.0版)
- Ubantu四种版本的区别
- 创业最初需要注意的大致有四点
- Tomcat 系统架构与设计模式--工作原理
- 大型网站高负载高并发的解决方法
- 关于访问权限的问题
- [面试] 各大IT公司校园招聘程序猿笔试、面试题集锦
- 下学期第一周项目1 日期结构体
- 高并发处理方案总结
- Windows下 maven3.0.4的安装步骤+maven配置本地仓库
- 淘宝下单高并发解决方案
- new Date()获取的时间与System获取的时间
- UIImage
- UIApplication深入研究