java中如何访问不同包,java – 不能从不同jar中的同一个包访问超类的保护成员...

好的,所以在axtavt和其他受访者的帮助下,我想出了什么问题.其他答案有帮助,但他们没有得到正确的,这就是为什么我在回答我自己的问题.问题原来是“运行时包”的概念,在

Java Virtual Machine specification中定义如下:

5.3创建和加载

在运行时,类或接口不是由其名称决定,而是由一对确定:其完全限定名称及其定义的类加载器.每个这样的类或接口属于单个运行时包.类或接口的运行时包由包名称定义并定义类或接口的类加载器.

5.4.4访问控制

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

> R被保护并且在C类中声明,D是C或C本身的子类.

> R是被保护的或者是私有的(即既不是public也不是private,也不是private),并且被同一运行时包中的类声明为D.

第一个条款解释道路是否允许访问Seed.garden,因为Road是Seed的子类,第二个条款解释了为什么Road 4号不允许访问它,尽管与Road相同,因为它不是在同一运行时程序包中,已被不同的类加载器加载.该限制实际上不是Java语言限制,它是Java VM限制.

所以对于我的情况的结论是,由于Java VM的合法限制,异常发生,我将不得不解决这个问题,可能通过将这些字段公开,这在这种情况下不是问题,因为它们是最终的,而不是秘密的,或者可能通过可以访问的道路将Seed.garden出口到4路.

谢谢大家的建议和答案!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值