其实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修饰符相关推荐

  1. java中demo接人_return的用法_如何理解java中return的用法?

    C语言中return用法?(请熟练者进) return是返回值,这个返回值是和函数的类型有关的,函数的类型是什么,他的返回值就是什么 比方主函数intmain() {}这里就必须有一个return,只 ...

  2. 简述java中的注释以及用法_怎样理解 Java 注解和运用注解编程?

    正好最近在公众号(BetterAndroid)发了一篇关于注解的文章,贴在这里吧,希望对题主有帮助. 一.什么是注解 我们都知道在Java代码中使用注释是为了提升代码的可读性,也就是说,注释是给人看的 ...

  3. java枚举类型enum用法_深入理解java枚举类型enum用法

    enum 的全称为 enumeraTIon, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 publi ...

  4. java class教程_深入理解Java Class文件格式(七)

    本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本文将会继续介绍class文件中未讲解的信息. 先回顾一下上面一篇文章. 在上一篇博客中, 我们介绍了: this_class ...

  5. 深入理解java虚拟机章节_深入理解java虚拟机-第六章

    第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 ...

  6. java画板抽象类_深入理解Java抽象类与接口

    基于抽象类与接口有太多相似之处且均体现着oop的抽象性,本文从以下几点谈谈对这两者的理解. 1.抽象类 2.接口 3.各自优缺点以及应用举例. 1.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象 ...

  7. java事件处理模型_从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  8. java对象实例_深入理解Java对象实例生成的例子!(转)

    深入理解Java对象实例生成的例子!(转)[@more@]代码如下: class A { public int Avar; public A() { System.out.println(" ...

  9. java 常量折叠_深入理解Java虚拟机之早期编译器优化

    Javac编译器 Javac编译器是一个由Java语言编写的程序 Javac的源码与调试 从Sun Javac的代码来看,编译器大致分为3个过程: 解析与填充符号表的过程 插入式注解处理器的注解处理过 ...

  10. sas java 虚拟机异常_深入理解JAVA虚拟机之异常诊断

    常见的JAVA虚拟机HotSpot虚拟机运行时数据库由5部分构成:方法区,堆,虚拟机栈,本地方法栈,程序计数器.下面列举各个部分可能出现的异常及其出现原因. 1.方法区存放的已被虚拟机加载的类型信息, ...

最新文章

  1. 看看那些双车中接力装置
  2. 使用Dapper处理多个结果集和多重映射的教程
  3. 聚焦2016:关于语音识别、图像识别及大数据
  4. 1041: 谭浩强C语言(第三版)习题5.5
  5. 微信小程序——聊天小程序(从搭建到结束)
  6. 利用计算机为祖国做贡献的人,李晓维:祖国,我把科研事业献给您
  7. 时空、光年、过去与现在
  8. 消费者大喊商家欺诈!宝贝ID下的商品违规修改也是定时炸弹!
  9. 0031 练习(猜拳游戏)
  10. 抖音短视频数据抓取实战系列(〇)——前言
  11. lept_json的学习之JSON
  12. Halcon 初体验
  13. 谷歌浏览器为什么推荐使用搜狗搜索?知乎网友的脑回路真是……
  14. 基于php的校园视频点播系统
  15. T-SQL执行内幕(1)——简介
  16. ptp时钟linux,Linux标准PTP堆栈将时钟IC与网络处理器相连
  17. [Data Structure]11. 图的实现和遍历
  18. 财务软件中的借贷关系
  19. 2013小米校园招聘
  20. MySQL 复制(四:复制原理)

热门文章

  1. Temporal Action Proposal Generation with Transformers TAPG transformer论文阅读笔记
  2. CyanogenMod - All the source code for CyanogenMod
  3. HDC1080 驱动程序代码(C语言版)
  4. java普通分隔符,懂得java的文件4种分隔符
  5. 独立IP、特产浏览量(PV)、访问次数(VV)、独立访客(UV)
  6. C语言关键字浅析-_Complex
  7. 下拉列表—DropDownMenu的使用解析
  8. 【产业互联网周报】云厂商加速布局政企市场:华为云发布七款新产品;腾讯政务战略升级;钉钉发布数字区县解决方案...
  9. 【C#】 .NET Reflector 安装与学习
  10. Attention机制原理