Java 中受保护的访问修饰符

2024-04-15

我在理解java中的受保护访问修饰符(或其背后的设计)时遇到了一些困难。我认为这意味着包访问和通过继承包含抽象成员的类的对象进行访问。

我编写了以下示例代码。我发现如果未注释,注释掉的行会产生编译错误。为什么我可以通过 Second 中的 Second 对象访问 pro,但不能通过 Second 中的 First 对象访问 pro?

package first;

public class First {

    protected void pro(){
        System.out.println("Can see protected method");
    }

}

package first;

public class InFirst {


    public static void main(String[] args){
        First fst = new First();
        fst.pro();
    }

}

package second;

import first.First;

public class Second extends First {

    public static void main(String[] args){

        First fst = new First();

//      fst.pro();

        Second sec = new Second();
        sec.pro();

    }
}

The webpage http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html@MadProgrammer linked 给出了一个不错的解释:

"protected修饰符指定该成员只能被访问 在它自己的包中(与 package-private 一样),此外,通过 另一个包中该类的子类。”

这意味着受保护的成员必须通过定义它的类或该类的子类直接访问,同时也位于适当的包中。这并不一定意味着您可以通过在所述类的子类中创建的所述类的实例来访问受保护的成员。重点是涉及的包。

以下是您的示例:

package first; // Current package

First fst = new First(); // from package first and does not extend anything
fst.pro();

尝试从哪个包访问有问题的成员?first

包含所述成员的(子)类或其继承该成员的父类是否在同一个包中定义?Yes, First定义于package first, 所以protected会员可从First in package first.

package second; // Current package

First fst = new First(); // from package first and does not extend anything
fst.pro();

尝试从哪个包访问有问题的成员?second

包含所述成员的(子)类或其继承该成员的父类是否在同一个包中定义?No, First定义于package first, so protected使该成员无法访问First in package second.

package second; // Current package

Second sec = new Second(); // from package second and extends First from package first
sec.pro();

尝试从哪个包访问有问题的成员?second

包含所述成员的(子)类或其继承该成员的父类是否在同一个包中定义?Yes, Second,其定义在package second,继承该成员First, 所以protected会员可从Second in package second.

为了清楚起见,更多示例:

package first; // Current package

Second sec = new Second(); // from package second and extends First from package first
sec.pro();

尝试从哪个包访问有问题的成员?first

包含所述成员的(子)类或其继承该成员的父类是否在同一个包中定义?Yes, Second继承该成员First,其定义在package first, 所以protected会员可从Second in package first.

package first; // Current package

Third third = new Third(); // from package third and extends Second from package second,
                           // which extends First from package first
third.pro();

尝试从哪个包访问有问题的成员?first

包含所述成员的(子)类或其继承该成员的父类是否在同一个包中定义?Yes, Third继承该成员Second,它继承自First其中定义了成员 (package first), 所以protected会员可从Third in package first.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中受保护的访问修饰符 的相关文章

  • 正确配置JDK环境变量后仍然找不到java命令

    我在 Windows 虚拟机启动时安装 JDK 使用 cloudinit 用户数据将 PowerShell 脚本传输到 Windows 计算机 然后运行该脚本来安装 JDK softwares Get ItemProperty HKLM S
  • 如何使用 Java 创建多个模式连接?

    我必须使用两个数据库 DB2 Oracle 我在 DB2 数据库中有一个名为NAVID 我想使用 Java 为 Oracle 中的所有表创建相同的架构 public class automateExport static String va
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 如何在Mac上使用eclipse安装jetty

    我是一个新手 jetty 和 RESTful API 我想使用 Jetty 创建 REST 服务 并希望将嵌入式 jetty 与 eclipse 一起使用 任何人都可以建议我在 Mac OS 中使用 Eclipse 安装 Jetty Jet
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用
  • 通过 JNI 从 Applet 调用 DLL

    我有一个 概念验证 的作品 它跨越了一些不熟悉的领域 我的任务是将 EFTPOS 机器连接到在内联网浏览器中作为小程序运行的应用程序 我暂时忽略了 EFTPOS dll 并用我选择的语言 Delphi 创建了一个简单的 JNI 修饰的 DL
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • Hystrix是否可以订阅CircuitBreaker开启事件?

    对于单元测试 我希望能够订阅 Hystrix 事件 特别是在断路器打开或关闭时发生事件 我四处寻找示例 似乎解决方法是利用指标流并监视断路器标志 由于 Hystrix 是基于 RxJava 构建的 我认为应该在某个地方有一个事件订阅接口 在
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • 如何在命令提示符中检查 JAVA_OPTS 值?

    我们的应用程序部署 JBoss 服务器然后抛出错误 PermGen space 然后在 jboss bat 和配置文件中设置 permgen 变量中的 java OPTS JAVA OPTs 中是否有值 assige 如何检查 如何在命令提
  • XSLT:我们可以使用abs值吗?

    我想知道在 XSLT 中我们是否可以使用 math abs 我在某处看到过这个 但它不起作用 我有类似的东西
  • NoSuchMethodError:将 Firebase 与应用程序引擎应用程序集成时

    我试图将 firebase 实时数据库与谷歌应用程序引擎应用程序集成 我在调用时收到此错误 gt DatabaseReference ref FirebaseDatabase gt getInstance gt getReference t
  • 膨胀类片段 InflateException 二进制 XML 文件时出错

    我正在使用 Material Design 和 NavigationDrawer 布局等设计我的第一个应用程序 但我遇到了一个问题 该应用程序非常简单 它只显示文本 并且基于 Android Studio 中提供的模板 尝试启动我的应用程序
  • 如何在 Java 中创建要打印到 JFrame 的 JLabels 数组

    我正在尝试制作一系列标签 每个标签都有一个来自函数的不同值 我不知道要使用的标签的确切数量 我的意思是可以打印任意数量的值 请帮我做这件事 很简单 只需一个方法返回一个数组或一些 JLabels 集合 并将它们全部添加到您的 JCompon
  • 在方法内声明类 - Final 关键字 [重复]

    这个问题在这里已经有答案了 给定方法中的以下内部类 IsSomething public class InnerMethod private int x public class Something private int y public
  • java中wav文件转换为字节数组

    我的项目是 阿塞拜疆语音的语音识别 我必须编写一个程序来转换wav文件到字节数组 如何将音频文件转换为byte 基本上如第一个答案中的片段所描述 但不是BufferedInputStream use AudioSystem getAudio
  • Java中的媒体播放器库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在评估用于在 Java 中播放音频 视频的库 它不需要 100 Java Java 与本机库的绑定
  • SWT - 与操作系统无关的获取等宽字体的方法

    SWT 有没有一种方法可以简单地获得跨各种操作系统的等宽字体 例如 这适用于 Linux 但不适用于 Windows Font mono new Font parent getDisplay Mono 10 SWT NONE 或者我是否需要

随机推荐

  • 有没有一个好方法来保存socket.io消息历史记录

    我想记录socket io消息历史记录 即两个用户交谈的内容 以供以后使用 是否有一些socket io内置函数可以实现这一点 或者如果没有 有什么好的方法来实现它 首先 您需要某种方法来识别具有唯一 ID 的用户 该 ID 在用户断开连接
  • Ria 服务将复杂对象作为参数传递给查询域服务方法

    我在使用 WCF RIA 服务时遇到一些困难 类似于中指定的问题这个线程 https stackoverflow com questions 2330085 cant pass collection class as parameter t
  • 在 C#4.0 中从字符串构建 Linq 查询 - 最佳实践

    目前 我正在使用 LinqKit Ms 动态查询示例从字符串动态构建 Linq 表达式 这很好用 LinqKit http www albahari com nutshell linqkit aspx http www albahari c
  • 在 Mac OS 上使用 OpenMP 和 C++11

    我正在尝试在我的 C 11 代码中使用一些 OpenMP 多线程功能 例如 pragma omp parallel for 当我尝试使用以下命令进行编译时 clang std c 11 stdlib libc fopenmp main cp
  • 使用 Django 的 ORM 加速批量插入?

    我计划使用 django 的 ORM 将从约 750 个文件 每个约 250MB 中获取的 10 亿条记录上传到数据库 目前每个文件需要大约 20 分钟来处理 我想知道是否有任何方法可以加速这个过程 我采取了以下措施 使用 transact
  • LINQ 语句比“foreach”循环更快吗?

    我正在编写一个网格渲染管理器 并认为将使用相同着色器的所有网格进行分组 然后在我处于该着色器通道中时渲染它们是一个好主意 我目前正在使用foreach循环 但想知道使用 LINQ 是否可以提高性能 为什么 LINQ 应该更快 它还在内部使用
  • 如何获取 ember 应用程序控制器中模板复选框的值

    我正在尝试查找控制器中是否选中了该复选框 这是我的模板 这是我的控制器 App Ember Application create App ApplicationController Ember Controller extend
  • PyQT 线程的最简单方法

    我在 PyQt 中有一个带有函数的 GUIaddImage image path 很容易想象 当需要将新图像添加到 QListWidget 中时会调用它 为了检测文件夹中的新图像 我使用threading Thread with watch
  • 如何使用 JSF 设置 HTTP 状态代码?

    我在 WebSphere Application Server 上使用 Apache Myfaces 2 2 我有一个 JSF 页面 它 测试 与文件系统和数据库的连接 当连接失败时 我想返回另一个HTTP状态代码 我怎样才能用 JSF 做
  • 按二级键对多维数组进行排序

    我有一个看起来像这样的数组 array 3 Fall Quarter 2012 gt array 2 20121018 gt array 1 agenda gt string 55 Fall 2012 Agenda 20121018 pdf
  • 无法让 ZClip 工作

    我知道它甚至在这个网站上也能工作 但只有当我通过 h1 元素触发它时 我需要通过图像 代表副本 触发它 但当我尝试时它根本不起作用 这是我的 JavaScript copyTxt click function alert Txt2Copy
  • 在 Java Card 上将 byte[] 转换为 Short[] 的快速方法

    我想在 Java 卡上优化 SHA 3 算法 我需要一种消耗更少内存的快速算法 可以轻松转换byte to short 或短 to byte 我当前的实现如下所示 private short byteToShort byte b int l
  • 表达 3.0 如何使用 app.locals.use 和 res.locals.use

    我在express3 0rc2上 如何使用app locals use 它还存在吗 和res locals use 我看到了这个https github com visionmedia express issues 1131 https g
  • 为什么 Range 有效,而 Cells 无效?

    我试图通过将一个范围内的值分配给另一个范围来将一些数据从一个工作簿移动到另一个工作簿中 当我使用正常的 Range 语法指定目标范围 Range A1 B2 时 我的代码可以工作 但是如果我尝试使用 Range Cells 语法 Range
  • 响应式视频播放器

    我需要一个使用 bootstrap 开发的响应式布局网站的视频播放器 这意味着当我重新调整屏幕大小或在不同尺寸的屏幕中查看页面时 播放器应该自动适合屏幕 我尝试过 jwplayer 和 flowplayer 但没有成功 http www l
  • 串行或并行调用多个ajax请求

    我有3个功能 load graphs national container natl rates container natl counts load graphs division Western container west rates
  • 添加 UIFont 并查找字体系列会因 EXC_BAD_ACCESS 崩溃

    我的问题是 当我添加描述的字体时here https stackoverflow com questions 3350131 how to add new font to xcode 3 2当我想检索字体系列名称时 UIFont famil
  • .NET Core 模板的 Markdown 语法是什么

    我有一个 NET Core 模板 https github com cilerler burcin blob master dist template config template json想知道如何根据设置的标志隐藏 markdown
  • XML 元素是否有标准的命名约定? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 XML 文档是否有任何标准 事实上的标准或其他标准 例如 哪种是编写标签的 最佳 方式
  • Java 中受保护的访问修饰符

    我在理解java中的受保护访问修饰符 或其背后的设计 时遇到了一些困难 我认为这意味着包访问和通过继承包含抽象成员的类的对象进行访问 我编写了以下示例代码 我发现如果未注释 注释掉的行会产生编译错误 为什么我可以通过 Second 中的 S