Java笔记: protected的真正含义
关于protected关键字,即使是Java初学者也能够说出它的含义:protected修饰的成员可以被子类访问。但是这样理解并不完全准确,下面考虑它的真正含义。
Java访问控制回顾
Java语言定义的访问级别有private、package、protected、public,从前往后访问权限依次扩大。protected和public成员可能被其他包访问,因此被认为是契约的一部分。其他三种访问都容易理解,而protected与继承有关,因此需要稍微注意。
简单示例
考虑如下Java程序,Zu、Fu、Zi(祖、父、子)分别定义在a、b、c三个包中,且Zu->Fu->Zi。Fu分别访问了来自this、Fu、Zu、Zi的protected成员age。那么下面test哪个能通过编译,哪个不能?
package a;
public class Zu {
protected int age = 67;
}
package b;
import a.Zu;
import c.Zi;
public class Fu extends Zu {
private void test1() {
System.out.println(this.age);
}
private void test2(Fu f) {
System.out.println(f.age);
}
private void test3(Zu z) {
System.out.println(z.age);
}
private void test4(Zi z) {
System.out.println(z.age);
}
}
package c;
import b.Fu;
public class Zi extends Fu {
}
真正含义
准确的讲,一个受保护的成员除了可以被自身以及同一个包的类访问之外,还可以通过对象引用访问,只要满足访问者类型比引用类型“宽”(同一类型或者父类)。
根据上述规则,test1、test2访问和被访问者类型都是Fu,因此编译通过。test4访问者是Fu,被访问者是Zi,Fu是Zi的父类,因此编译通过。只有test3中被访问的引用为Zu,不是Fu的子类,因此编译不通过,规则掌握之后就很简单了。
Java笔记: protected的真正含义的更多相关文章
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- Java笔记 —— 继承
Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...
- Java笔记 —— 方法重载和方法重写
Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...
- 《Java笔记——基础知识点》
Java笔记--基础知识点 位运算符操作的都是整型的数据. 位运算符是直接对整数的二进制进行计算. 整数不能进行逻辑运算. 运算符优先级别由高到低分别是:() > ! > 算术 ...
- 【转】java中volatile关键字的含义
java中volatile关键字的含义 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言 ...
- JAVA中protected的作用
JAVA中protected的作用 1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是 ...
- 转:java中volatile关键字的含义
转:java中volatile关键字的含义 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言 ...
- java笔记00-目录
--2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:
随机推荐
- 图论初步<蒟蒻专属文章>
前言: 图论乃noip之重要知识点,但有点难理解 本人因此吃过不少亏 因为本人实在太弱,所以此篇乃正宗<蒟蒻专属文章> 正文:(本文仅介绍图论中的重点.难点,其余部分略将或不讲) 图 ...
- UITextField的使用、介绍、讲解、全解、简介、说明
[2018年中秋节良心写作]文章将尽可能的全面介绍UITextField的所有相关知识,逻辑连贯,需要认真理解,一气呵成. 关键词: 屏幕键盘(onscreen keyboard).键盘自定义.键盘类 ...
- pyhton的返回值
a=input() input()函数返回的是字符‘2’ a=bin(2) bin函数返回的是二进制形式的字符串'0b10' type()判断类型 bin()转化成二进制 int(a,2)可以强制把字 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:"text-info" 类的文本样式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- S7-300 符号IO域的组态 HMI变量指针化的方法以及应用,在一个IO域显示多个温度值的办法
应用工业场景 例如需要测试很多个节点的温度值的时候,需要监控的位置很多,如果HMI的画面很小, 可以使用符号IO域和变量的间接寻址 符号IO域接近于VB中的combo 控件 实现上图的界面 : 上图界 ...
- Hystrix熔断机制导致误报请求超时错误
问题的过程如下: (1)前端向服务端请求往HBase插入1000条数据: (2)请求经路由网关Zuul传递给HBaseService,HBaseService执行插入操作: (3)插入操作需要的时间超 ...
- Slim安装以及使用
最近在用backbone.js 做东西,因为牵扯到REST services 所以需要后台支持,此处选择了php.Slim 是php的一个框架. 貌似国内文章对此的介绍比较少,在安装Slim的过程中出 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片:缩略图功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:内容居中
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 收藏了一篇很有用的博客 “npm的安装教程”
暂时贴上这一篇博客的地址,感谢原作者 https://www.cnblogs.com/goldlong/p/8027997.html 使用之前,我们先来掌握3个东西是用来干什么的. npm: Node ...