編集: Java のプログラミングに Eclipse しか使用したことがないため、以下のすべて (および Java に関する私の知識) は、その環境での Java のプログラミング方法に依存しています。
クラスXのプロジェクトAとクラスYのプロジェクトBの2 つの Eclipse プロジェクトがあります。プロジェクト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
}
}
私のセットアップでは、クラスYは、 Oが ではない限り、Oをインスタンス化できます。つまり、Oにデフォルトのアクセス修飾子があっても、YはOのメンバーと変数にアクセスできます。デフォルトのクラスは、共通のパッケージを共有している場合にのみ外部クラスがアクセスできることを意味すると思っていたので、これは私を混乱させます。private
したがって、ここから得た結論は、すべてのプロジェクトのデフォルト パッケージが同じであるか、何らかの方法で接続されている必要があるということです。私はこれを考えるのが正しいですか?これが正しい場合、一方のプロジェクトのパッケージに加えられた変更は、他方のパッケージに反映されますか?
そして、これは私が扱っている主な問題を示しています。私の例では、YがOをインスタンス化できないように、クラスOへのアクセスを制御したいと考えています。今できる唯一の方法は、 O の可視性をプライベートに設定することですが、これにより、同じプロジェクト (プロジェクトA ) の他のクラスがOにアクセスすることも制限されます。プロジェクトBのクラスY (プロジェクトAとは異なるパッケージがあると思いました)がOにアクセスできないようにしたいのですが、 Y/O と同じプロジェクトの他の任意のクラスがOにアクセスできるようにします問題なく。これどうやってするの?