栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法从不同jar中的同一包访问父类的受保护成员

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法从不同jar中的同一包访问父类的受保护成员

好的,因此在axtavt和其他答复者的帮助下,我弄清楚了问题所在。其他答案有帮助,但他们没有完全正确,这就是为什么我要回答自己的问题。问题原来是“运行时软件包”的概念,在Java虚拟机规范中定义如下:

5.3创建和加载

…在运行时,一个类或接口不是由其名称单独确定的,而是由一个对确定的:其完全限定的名称及其定义的类加载器。每个此类或接口都属于一个运行时包。类或接口的运行时包由包名称以及类或接口的定义类加载器确定。…

5.4.4访问控制

…当且仅当以下任一条件为真时,类或接口D才可以访问字段或方法R:…

  • R受保护并在C类中声明,D是C的子类或C本身。
  • R是受保护的或为包私有的(即,既不是公共的也不是受保护的也不是私有的),并且由与D相同的运行时包中的类声明。

第一部分解释了为什么Road被允许访问Seed.garden,因为Road是Seed的子类,而第二部分解释了为什么Road $
4尽管与Road处于同一个包中,却不允许访问它,因为它不是在同一 运行时 包中,由不同的类加载器加载。该限制实际上不是Java语言限制,而是Java
VM限制。

因此,根据我的情况的结论是,由于Java
VM的合法限制而导致发生了异常,因此我将不得不通过将字段公开来解决该问题,因为在这种情况下,这不是问题是最终的,而不是秘密的,或者通过有访问权的Road将Seed.garden导出到Road
$ 4。

谢谢大家的建议和回答!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号