3

最近、JDK1.6 を使用して Java の学習を開始しました。これがばかげた質問である場合は、ご容赦ください。

main() のオブジェクトからプライベート変数に直接アクセスできる場合、それらはどのように「プライベート」になりますか?

public class Account1
{
private int accountNum;
private String name;

Account1() {
    accountNum = 1101;
    name = "Scott";
}

public void showData() {
    System.out.println("Account Number: " + accountNum +
        "\nName: " + name);
}

public static void main(String[] args) {
    Account1 myA1 = new Account1();
    myA1.showData();
    System.out.println(myA1.accountNum); //Works! What about "Private"?!
}
}

出力は次のとおりです。

Account Number: 1101  
Name: Scott  
1101
4

4 に答える 4

6

メインは Account1 クラスにあるため、同じスコープ内にあります。

プライベート変数には、同じ型に属する任意のコードからアクセスできます。メイン メソッドが別のクラスにある場合、それらにアクセスすることはできません (リフレクションを使用しないと)。

于 2010-02-08T21:39:24.270 に答える
1

特定のクラスの「メイン」メソッドは、そのクラスの一部です。クラスの一部であるメソッドは、そのクラスのプライベート メンバーにアクセスできます。それは私には理にかなっています。もちろん、必ずしもそれを使用する必要があるというわけではありません。

これについて考える 1 つの方法は、別のクラスの内部動作に関するあるクラスの知識について考えることです。私の Person クラスは、私の Order クラス内で何が起こっているかを認識すべきではありません。パブリック メソッドを呼び出すだけです。しかし、もちろん、Person 内のすべてのものは、Person の内部構造について知っています。Person の別のインスタンスであっても同様です。

于 2010-02-08T21:39:15.627 に答える
0

それらは、そのクラスのみがアクセスできるという点で非公開です。これは、そのクラスの静的メソッド ( などmain) からも、インスタンス メソッド ( など) からもアクセスできることを意味しますshowData

クラスの 1 つのインスタンスは、クラスの別のインスタンスのプライベート メンバーにもアクセスできます。

たとえば、別のクラスがある場合、Account2の証明メンバーにアクセスすることはできませんAccount1

于 2010-02-08T21:39:25.157 に答える
0

これは、main() 関数がクラスのメンバーであるためです。クラスのすべてのメンバーにアクセスできます。

実際のコードでは、メイン関数は通常、残りのコードを実際にブートストラップする「ハーネス」クラスに配置されます。通常、このハーネス クラスは非常に軽量で、実際の作業を行う他のクラスをインスタンス化します。

于 2010-02-08T21:40:14.177 に答える