2011-06-25 11 views
0

まず、PrivateShirt1という名前のクラスを作成し、同じクラスファイル内でそのクラスのオブジェクトを作成した後でプライベートフィールド名を呼び出しました。クラス内で作成されたオブジェクトはプライベートフィールドにアクセスできますが、別のクラスで作成されたオブジェクトはなぜですか?

public class PrivateShirt1{ 
    private String name; 

    public static void main(String args[]){    
     PrivateShirt1 s1=new PrivateShirt1(); 
     s1.name="hi"; 

     System.out.println(s1.name);  
    } 
} 

次の私はPrivateShirt1のmainメソッドを入れてコンパイルし、それを呼び出す機能を実行しているPrivateShirt2と呼ばれる別のファイルを作成しました。変更後のファイルPrivateShirt1PrivateShirt2は、次のようになります。

public class PrivateShirt2{ 

    public static void main(String args[]){    
    PrivateShirt1 s1=new PrivateShirt1(); 
    s1.name="hi"; 

    System.out.println(s1.name);  
    } 


public class PrivateShirt1 { 
    private String name;  
} 

を、私はPrivateShirt2ファイルをコンパイルするとき、それは私が呼び出そうとした属性がプライベートであることを示すエラーを与えました。

しかし、なぜこれは前の例では起こりませんでしたか?つまり、オブジェクトは両方のケースで作成されたため、両方のルールが同じである必要があります。だからなぜこの部分的な治療?誰かが精緻化できますか?

答えて

0

あなたはJavaアクセスコントロールを見る必要があります。 PrivateShirt1のname変数にはプライベートアクセスがあります。そのフィールドの意味は、そのクラスの内部からのみ参照できます。 PrivateShirt2はそのフィールドにアクセスできません。それは

PrivateShirt1

内で呼び出されたために、あなたの最初の呼び出しが働いていた理由は、 http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

+0

カプセル化:オブジェクトのコンポーネントの一部へのアクセスを制限するための言語メカニズム。 http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29 –

+0

申し訳ありません私は一日中jsを書いています。グッドキャッチ –

+0

javascript?ああ..... – Gabe

0

private修飾子はあなたが唯一のクラス内のコードからアクセスできることを意味しています。したがってstaticメソッドまたは内部クラスからprivateメンバーにアクセスできます。

関連する問題