6

これは非常に基本的な質問であることは承知していますが、常に私を悩ませてきた質問です。私が理解しているように、Javaでフィールドをプライベートに宣言すると、そのクラスの外では見えません。保護されている場合は、継承されたクラスと同じパッケージ内のすべてで使用できます (これらの定義のいずれかが正しくない場合は修正してください)。

これは、継承されたクラスのみがアクセスでき、同じパッケージ内の他の継承されていないクラスにはアクセスできないフィールドを宣言することはできないということですか?

これを回避する方法があることを感謝しますが、この種の動作をしたい場合はありますか?

明らかに、上記の質問はメソッドだけでなくフィールドにも当てはまります。

どうもありがとう。

4

3 に答える 3

12

http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html Package > Subclassesを参照してください
。同じパッケージのクラスからではなく、サブクラスからのみフィールドを表示することはできません。

于 2009-01-21T10:30:14.947 に答える
4

基本的:

  • private: クラスのみがアクセスできます。
  • public: どのクラスからもアクセスできます。
  • protected: クラス、継承されたすべてのクラス、および現在のパッケージ(編集済み)のクラスからアクセスできます。
  • スコープが定義されていません: 現在のパッケージのすべてのクラスからアクセスできます。

詳細はこちら

于 2009-01-21T10:31:33.370 に答える
2

はい、Java の保護されたアクセスは、その点で少し奇妙です。なぜそれが望ましいのか、すぐにはわかりません。個人的には、プライベート以外のフィールド (定数以外) は好きではないので、フィールドについては気にしませんが、他のメンバーにも同じことが当てはまります。

.NET には、パッケージ/名前空間アクセスの可視性の概念がまったくありませんが、代わりにアセンブリがあります (「jar ファイル」と考えてください - まったく同じではありませんが、近いです)。率直に言って、名前空間デプロイメント ユニットの可視性オプションが欲しいのですが、がっかりする運命にあるようです...

于 2009-01-21T10:33:28.293 に答える