深入理解Java的protected修饰符
其实Java的protected修饰符,权限定义的很微妙,大致有以下几种:
(1)protected控制符用于修饰方法和成员变量;
(2)一个类的protected方法或成员变量,在包外是不能通过该类对象进行访问的,即便在该类的子类中也不可这么做;
在该类包外的子类中能访问的只是子类自己继承来的protected 方法和属性,即可以用super来访问;
(3)在包外的子类中,不能用另外一个子类的对象访问父类中的protected变量,尽管这两个子类继承自同一个父类;
(4)在包内,则可以;
(5)而对于protected的静态变量,在子类中可以直接访问,在不同包的非子类中则不可访问;
(6)对于protected的用法,其实是遵循了OOP的一个原则,方法和成员变量被继承后,其可见的范围只能扩大,不能缩小;
父类:Test.java
package test1; public class Test {
protected String getNumber() {
return "test";
}
}
不同包的子类:ProtectedTest2.java
package test2; import test1.Test; public class ProtectedTest2 extends Test { public void test1() {
//无法访问:无法通过父类的引用来访问
Test test = new Test();
Test test1 = new ProtectedTest2();
// test1.getNumber();
// test.getNumber();
} public void test2() {
//可以访问:可以通过继承的super来访问,或直接不用super;
getNumber();
super.getNumber();
} public void test3() {
//可以访问:通过子类对象来访问;
ProtectedTest2 pTest2 = new ProtectedTest2();
pTest2.getNumber();
} public void test4() {
//无法访问:包外的子类中,不能用另一个子类的对象访问父类的protected变量,尽管这两个子类继承自同一个父类;
ProtectedTest3 pTest1 = new ProtectedTest3();
// pTest1.getNumber();
} }
不同包的子类ProtectedTest3.java
package test2; import test1.Test; public class ProtectedTest3 extends Test{ }
同包的子类ProtectedTest1.java
package test1; import test2.ProtectedTest3; public class ProtectedTest1 { public static void main(String[] args) { Test test = new Test();
test.getNumber(); //在同包中访问 和父类不在同一包的子类,可以访问;
ProtectedTest3 pt = new ProtectedTest3();
pt.getNumber(); }
}
深入理解Java的protected修饰符的更多相关文章
- java protected修饰符理解
Protected类型可以在本包和子类中访问的含义.在本包中访问,顾名思义,可以在定义类的包中的任何地方申请一个包含protected修饰符的域和方法的类的对象,并通过这个对象访问被protected ...
- 关于Java的权限修饰符(public,private,protected,默认friendly)
以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚. 现在总结如下: 一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限 Java访问权限修饰符包含四个:p ...
- java protected修饰符说明
1. 简介 对protected修饰符进行阐述,结合Object类的clone方法进行说明.其中clone方法如下:protected Object Object.clone(): 关于protect ...
- 对于Java中权限修饰符的理解
老是把Java中权限修饰符给忘记,写一个博客加深印象吧 权限分为四个作用域:当前类,同一个包,其他包的子类,其他包的类. 首先要知道包的概念,Java中一个包是指一个package下的所有文件. pr ...
- Java中的 修饰符
java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符 访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共 ...
- Java中各种修饰符与访问修饰符
Java中各种修饰符与访问修饰符 类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备 ...
- java访问权限修饰符
作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × ja ...
- java标识符、修饰符和关键字
一.标识符 1.概念:标识符好比人和物的姓名,java中标识符就是类.对象.方法.变量.接口和自定义数据类型等等的名字. 2.规则: (1)首位不能是数字. (2)标识符对大小写敏感. (3)不可以是 ...
- java 接口默认修饰符
概论: java接口可以是public 的,也可以是friendly的,但一定是abstracted的. java接口里的方法只能是public的.abstract的. java接口里的成员变量只能是 ...
随机推荐
- 【Ruby on Rails 学习一】ubuntu14.04配置rvm与ruby
要安装ruby,首先要安装rvm,借助rvm安装ruby rvm 的全称是 Ruby Version Manager ,是一款由 Wayne E. Seguin 开发的一款命令行工具.rvm 能够让 ...
- 数据库版本管理工具Flyway(4.0.3)---工作机制(译文)
How Flyway works The easiest scenario is when you point Flyway to an empty database. 最容易的方案是Flyway指向 ...
- 关于数据表命名为mysql保留的时候的操作
今天操作数据表的时候,发现order数据表无法进行操作,必须加上反单引号才能进行操作,查了一下原因: 反引号是用来区别mysql关键字的,比如,如果你有一个表名叫select,你就必须写成`selec ...
- 前端input选中状态时的蓝框
input标签在选中状态时,我们的浏览器不同时,会有不同效果. 一般我们chrome时可能会没有这个效果,但是如果是safari时,这个效果就... 这时为了达到效果统一,我们不得不去掉这个蓝框,就要 ...
- [原创+实战+钓鱼]setoolkit+映射
所需工具:setoolkit,花生壳 (此方法主要针对没有服务器,没有空间的攻击者.有服务器或者空间可以直接上传setoolkit的生成源码到服务器或者空间.) 1.setoolkit克隆一个站点 | ...
- 转载: C#: Left outer joins with LINQ
I always considered Left Outer Join in LINQ to be complex until today when I had to use it in my app ...
- AddForce给物体添加刚体效果并且脚本增加一个力(按空格实现)
using UnityEngine; using System.Collections; public class CubeAddForce : MonoBehaviour { float hor,v ...
- dojo 学习笔记之dojo.query - query(id) 与query(class)的差别
考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用d ...
- Mysql查看连接端口及版本
C:\Users\Administrator>mysql -uroot -pEnter password: *****Welcome to the MySQL monitor. Commands ...
- thinkphp 中 使用七牛云上传
利用七牛云私有空间存储文件 第一步,注册七牛云,创建空间,将空间设为私有 需要记下的东西: AK,SK,bucket 第二步配置ThinkPHP 在config.php添加 'UPLOAD_SITEI ...