java 包类的访问权限问题_在Java中,为什么可以在同一个包中从类外面访问受保护的成员?...

In his book, Herbert Schildt says in page 172 (3rd paragraph) that “protected applies only when inheritance is involved.”.

有一个论点说,这个说法是正确的,虽然我会说这是很误导的.让我们来看看the access control tutorial的访问表:

Modifier Class Package Subclass World

public Y Y Y Y

protected Y Y Y N

no modifier Y Y N N

private Y N N N

请注意,没有修饰符授予对成员的类和包访问权限,并且不授予对子类或世界的访问权限.受保护只会更改以下事项之一:它使该成员可用于子类.所以在这个意义上说,他是正确的:它只适用于继承涉及时;没有继承,它与没有修饰符相同.

但是我觉得这很有误导性,因为这样才能启发你的问题:这似乎意味着不会有包裹的访问.语句唯一的方法是,如果你已经知道没有修饰符赋予包访问权限.

为了清楚起见:protected意味着一个成员可用于包中的任何类并在子类中编码.这样做可以使图书馆有一个字段和方法,您只能访问作为库的一部分的代码(一些,见下文)或有助于在库中实现某些内容的代码(例如,如果您从其中一个图书馆类).除了这种语言设计之外,没有什么特别的“为什么”.

If it is so, then I find no difference between the public and protected specifiers in this situation.

在这种情况下,没有.但是,当您考虑不在同一个软件包中并且不在包成员的派生类中的代码时,显然有很大的差异:该代码无法访问受保护的成员.

…if the member or constructor is declared protected, then access is permitted only when one of the following is true:

Access to the member or constructor occurs from within the package containing the class in which the protected member or constructor is declared.

Access is correct as described in §6.6.2.

(注意第一个项目符号)和JLS§6.6.2:

A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object.

(“负责实现该对象的代码” – 例如子类中的代码.)

*我的“一些,见下面”关于“这样做可以让一个图书馆有一个字段和方法,你只能访问的图书馆的一部分…”这不是真的,因为除了受限制的包(例如,java.lang),您可以很高兴地编写自己的类,说明它在库的包中,然后使用库的类的包级别字段和方法. Java的包概念不是一个字段/方法的安全机制.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值