7

クラス レベルまたはオブジェクト レベルでのプライベート メンバー アクセスです。オブジェクト レベルの場合、次のコードはコンパイルされません。

    class PrivateMember {
   private int i;
   public PrivateMember() {
      i = 2;
   }
   public void printI() {
      System.out.println("i is: "+i);
   }
   public void messWithI(PrivateMember t) {
      t.i *= 2;
   }
   public static void main (String args[]) {
      PrivateMember sub = new PrivateMember();
      PrivateMember obj = new PrivateMember();
      obj.printI();
      sub.messWithI(obj);
      obj.printI();
   }
}

sub の messWithI() メソッド内で obj のメンバー i にアクセスすることが有効かどうかを明確にしてください

4

7 に答える 7

3

ない。プライベート アクセスは、それを取り囲む最上位クラスに限定されるため、同じ最上位クラス内の別のクラスのプライベート メンバーにアクセスできます。

class PrivateAccess {
    static class InnerOne {
        private int value;
    }

    static class InnerTwo {
        int getOne ( InnerOne other ) {
            return other.value;
        }
    }
}

クラス アクセスの通常の意味は、同じ型の他のインスタンスのプライベートにアクセスできることを意味します。Java では、プライベート アクセスは型ではなく語彙的に決定されます。

于 2009-03-24T11:19:03.900 に答える
2

クラスレベル。アイデアは、クラスのコード (他には何もない) がそのクラスのオブジェクトを処理する方法を知っているということです。

とにかくクラスのソース コードにアクセスできる場合は、何かを「隠す」ことにはほとんど意味がありません。

于 2009-03-24T11:09:07.700 に答える
1

他の人が述べているように、プライベート、デフォルトアクセス(「パッケージプライベート」)、保護され、おそらくJDK 7モジュールではクラスベースです(ネストされたクラスの継承には、覚えていない非常に奇妙なルールがあります)。しかし、なぜ?

主に、バイナリ(またはそれ以上)の演算子として機能するメソッドに依存します。効率的な実装のために、パブリックAPIを使用または変更することなく、多くの場合、作成が必要になるか、作成が容易になります。-の実装を確認してequalsください。優れたコードでは、へのメソッド呼び出しがほとんどなくても、フィールドに直接アクセスできますthis。(これのパフォーマンスの側面は、一般的な呼び出しをインライン化する最新のJVMとはほとんど関係ありませんが、コード品質の問題は依然として存在します。)

于 2009-03-24T11:39:55.330 に答える
0

同じページのサブセクション 6.6.8 には、次のステートメントもあります。

プライベート クラス メンバーまたはコンストラクターは、メンバーまたはコンストラクターの宣言を囲む最上位クラスの本体内でのみアクセスできます。サブクラスには継承されません。

ここでアクセスを評価するプライベート クラス メンバーはiです。

public void messWithI()は、 iが宣言されている最上位クラスの本体内に存在するメソッドであり、正確にはPrivateMemberです。

あなたの構成は上記のステートメントを満たしているため、問題なく実行されます。

これは、Jon と Devsolar と同じことを別の言い方で表したものです。

クラス メンバーのアクセス修飾子は、アクセスが許可されるメンバーの種類 (クラス メンバーまたはインスタンス メンバー) に関係なく、コードが記述されている場所 (パッケージ、およびクラス) に関連しています。

論理的には、クラスのインスタンスがない場合、クラスのインスタンス メンバーを使用することはできませんが、これはメンバーのライフサイクルに関連する別の問題です。

于 2009-03-24T11:51:32.697 に答える