编辑:我只使用过 Eclipse 来编写 Java,因此以下所有内容(以及我对 Java 的所有知识)都取决于 Java 在该环境中的编程方式。
我有两个 Eclipse 项目:项目A与X类和项目B与Y类。项目B的Y类扩展了项目A 的X类。
public class Y extends X // In short B is dependent on Project A
X类是public
并且它有一个嵌套类O。
public class X {
class O { // default access modifier
}
}
在我的设置中,只要O不是,类Y就可以实例化O。这意味着,即使O具有默认访问修饰符,Y仍然可以访问O的成员和变量。这让我很困惑,因为我认为默认类意味着外部类只有在共享一个公共包时才能访问它。private
所以我从中得到的结论是,每个项目中的默认包必须相同或以某种方式连接。我这样想对吗?如果这是正确的,在一个项目的包中所做的更改会反映在另一个项目的包中吗?
这提出了我正在处理的主要问题。我想控制对O类的访问,以便在我的示例中,我希望Y不能实例化O。我现在唯一能做到的方法是将 O 的可见性设置为私有,但这也限制了来自同一项目(项目A)的其他类访问O。我希望项目B中的Y类(我认为与项目A有不同的包)无法访问O但与 Y/O 相同的项目中的其他任意类可以访问O没有问题。我怎样才能做到这一点?