深入理解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接口里的成员变量只能是 ...
随机推荐
- Linux+eclipse+gdb调试postgresql源码
pg内核源码解析课上用的vs调试pg源码, VS用起来确实方便,但是配置调试环境着实有点麻烦.首先得装个windows系统,最好是xp,win7稍微麻烦点:最好使用vs05,08和10也可以,但是比0 ...
- github atom创建自己的语法高亮
使用atom一段时间了,有些插件还不是很成熟.比如项目中使用protobuf,早就有人写了语法高亮(https://github.com/podgib/atom-protobuf),但是效果不是很好. ...
- mybatis + log4j 打印mybatis的sql
项目中使用log4j管理日志,同时使用了mybatis 在log4j中rootLogger级别是info的情况下正常是不会打印sql出来的,这个时候设置如下: log4j.rootLogger=inf ...
- android中发送邮件
在移动互联网时代,手机邮件已不是什么新鲜事了,我们可以使用内置的Gmail引擎来发送邮件,也可以使用SMTP来发送邮件,下面用一个简单示例来演示邮件的发送,包括单方发送邮件.多方发送邮件以及抄送邮件, ...
- [Javascript] Intro to Recursion - Detecting an Infinite Loop
When using recursion, you must be mindful of the dreaded infinite loop. Using the recursive function ...
- Android 基于Netty的消息推送方案之对象的传递(四)
在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...
- smbpasswd命令常用选项
smbpasswd命令的常用方法 smbpasswd -a 增加用户(该账户必须存在于/etc/passwd文件中)smbpasswd -d 冻结用户,就是这个用户不能在登录了smbpasswd -e ...
- openwrt time sycronize
三行命令搞定这个. opkg update opkg install ntpclient ntpclient -s -c 0 -h ntp.sjtu.edu.cn 最后把这个 放到 rc.local ...
- DataGrid( 数据表格) 组件[3]
本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...
- 网页CSS
CSS 样式表,(分三类:内联.内嵌.外部) 1,内联, 直接作于于 元素 例: <p style="font-size:14px;"> 2,内嵌 作用于网页 首先 ...