java的访问限制有private、protected、public。这里只想进一步认识一下protected。

我对protected有4个疑问:

1,在相同包中,是否可以调用其它类的protected函数?

2,在不同包中,是否可以调用其它类的protected函数?

3,在子包中,父包的类能否调用子包的类的protected函数?

4,在父包中,子包的类能否调用父包的类的protected函数?

带着这4个疑问,我开始做实验,先建立一个test_protected_prj的java工程,然后在src里边建立包school0,在包school0中建立两个类LiLei和HanMeimei,如图:

在类LiLei中定义一个protected函数,如下:

package school0;

public class LiLei {
protected int getMathScore(){
return 90;
}
}

在类HanMeimei中定义一个函数访问LiLei的protected函数,让韩梅梅询问她的同学李雷的数学考了多少分,如下:

package school0;

public class HanMeimei {
public void askSchoolmate(){
LiLei lilei = new LiLei();
lilei.getMathScore();
}
}

此时发现编译器没报错,说明相同包中可以访问其它类的protected函数。

那么接下来看第二个问题:

在src目录下建立包school1,和包school0是平级的,在school1中建立一个类BadStudent,如图:

在BadStudent类中定义函数,让他询问李雷数学考了多少分,如下:

此时编译器报错了,说明BadStudent不能够访问LiLei的getMathScore函数,protected函数不能跨包被访问。

接下来,看第3个问题:

在包school1下边建立包class1,在class1中建立类XiaoDi,如图:

在XiaoDi中定义函数getMathScore,如下:

package school1.class1;

public class XiaoDi {
protected int getMathScore(){
return 0;
}
}

在BadStudent中访问XiaoDi的getMathScore函数,如图:

编译器报错,父包的类不能调用子包的类的protected函数,看来小弟也不愿意告诉坏学生分数,考得太低了,不愿意说。

接下来看第4个问题:

在BadStudent中定义函数getMathScore,如下:

package school1;

public class BadStudent {
protected int getMathScore(){
return 0;
}
}

在XiaoDi中定义函数askScore函数,如下:

编译器报错了,XiaoDi没有权限访问BadStudent的getMathScore函数。

最后总结如下:

只有在同包中的两个类,才可以互相访问protected函数。不同的包,包括父包和子包,不能访问其他类的protected函数。

protected的一些功能的更多相关文章

  1. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  2. Java基础——继承和多态

    面向对象的编程允许从已经存在的类中定义新的类,这称为继承. 面向过程的范式重点在于方法的设计,而面向对象的范式将数据和方法结合在对象中.面向对象范式的软件设计着重于对象以及对象上的操作.面向对象的方法 ...

  3. git锁和钩子以及图形化界面

    1.锁机制 Locking Options 严格锁(strict locking):一个时刻,只有一个人可以占用资源. 乐观锁(optimistic locking):允许多个人同时修改同一文件.乐观 ...

  4. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  5. Xamarin. Android实现下拉刷新功能

    PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...

  6. ABP框架 - 功能管理

    文档目录 本节内容: 简介 关于 IFeatureValueStore 功能类型 Boolean 功能 Value 功能 定义功能 基本功能属性 其它功能属性 功能层次 检查功能 使用Requires ...

  7. 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计

    ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...

  8. 解析大型.NET ERP系统 数据审计功能

    数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...

  9. 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能

    做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...

随机推荐

  1. Startup 和 Middleware(中间件)

    Startup 和 Middleware(中间件) ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Con ...

  2. 在word中批量制作条形码

    条码打印软件可以批量生成条形码然后直接打印,但是有些客户不需要直接打印,而是想将生成的条形码在word中进行排版,发给自己的客户或者下属部门来打印.那么如何实现在word中批量制作条形码呢? 操作很简 ...

  3. MFC自绘控件学习总结第二贴---转

    首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/2011071 ...

  4. poj 1068 Parencodings(栈)

    题目链接:http://poj.org/problem?id=1068 思路分析:对栈的模拟,将栈中元素视为广义表,如 (((()()()))),可以看做 LS =< a1, a2..., a1 ...

  5. Java面试题之三

    十一.谈谈final,finally,finalize的区别? 1.final:是修饰符,是一个关键字.修饰变量,如果是基本类型表示该变量的值不能修改:如果是引用类型表示该变量不能指向别的对象:修饰类 ...

  6. mysql中怎样查看和删除唯一索引

    mysql中怎样查看和删除唯一索引. 查看唯一索引: show index from mytable;//mytable 是表名 查询结果例如以下: 查询到唯一索引后,怎样删除唯一索引呢,使用例如以下 ...

  7. jvm Classload method介绍

    1,jvm Classload默认几个重要方法介绍 findClass:Finds and loads the class with the specified name from the URL s ...

  8. 写一个方法完成如下功能,判断从文本框textbox1输入的一个字符,如果是数字则求该数字的阶乘,如果是小写字条,则转换为大写,大写字符不变,结果在文本框textbox2中显示

    窗体设计: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  9. url地址传参中文乱码处理

    1.将字符串转码:new String(“xxxxx”.getBytes("iso-8859-1"),"utf-8") 这种转码方式有很大的弊端,因为它是使用指 ...

  10. 用C语言打印出三角函数

    在网上看到一个实例,是用C 中的* 打印出三角函数cos #include<stdio.h> #include<math.h> int main() { double y; i ...