【发布时间】:2015-05-05 18:12:31
【问题描述】:
我在 StackOverflow 中看到了一些关于这个主题的讨论,但我没有看到有助于我理解以下要点的内容:
我来自 C++ 背景,最近开始学习 Java。 在 C++ 中,当使用 protected 时,只有子类可以访问成员(类似于 Java 中的 Field)。
在 C++ 中,还有“朋友”类可以访问提供“友谊”的类的私有/受保护的成员。 这有点类似于 Java 中的“包”字段修饰符(默认字段修饰符),除了在 C++ 中友谊允许访问所有私有成员,但在 Java 中,来自同一包中的类的访问是特定于类字段的。
我无法理解的是,假设我只想授予对子类的访问权限,我可以在 C++ 中通过在不“给予”友谊的类中声明受保护的成员来做到这一点。
但在 Java 中,我不知道该怎么做,因为通过使用“受保护”字段修饰符 - 我还可以访问包中的所有类。 我发现这样做的唯一方法是声明该字段受保护并将类隔离在其包中。
从这里,我得出的结论是,一个包中的类分组必须基于类之间的“友谊”。 这确实是包分组的主要考虑因素吗?
还有一点我不明白, 在Java中,假设我在A类中有两个字段:b,c。 我想让 B 访问 b 而不是 c, 我想让 C 访问 c 而不是 b。 对于“世界”,我希望 b,c 被隐藏起来。 如何做呢? 我猜B,C应该都和A在同一个包里。 但是通过使用 package 修饰符声明 b,c,我让 B,C 同时访问 b 和 c。 Java 中有没有办法做到这一点?
希望对这个主题有一些解释
【问题讨论】:
-
一个更好的问题,如果对您不太有用,会更窄更具体。 “Java 和 C++ 中关于隐私的一切以及它们之间的区别”这个一般性问题有点过于宽泛了。您能否针对更具体的问题提出更具体的问题?
-
我建议删除 C++ 标签,因为您的问题更多是关于 Java 语言而不是 C++ 语言。
-
This table 清楚地说明了 Java 中各种访问级别的范围。
标签: java access-modifiers