0

保護されたアクセスとパッケージアクセスのアイデアを理解しようとしています。コンパイラでそれらを試しましたが、問題があると言い続けました

public class example{

    int s = example2.v;

    public static void main(String args[]){


    }
} 

public class example2 {

    int v = 0 ;

}

誰でもこれで私を助けることができますか?なぜそれが言う:

非静的変数 v は、静的コンテキストから参照できません。

変数 's' は静的ではありません!

4

2 に答える 2

5

v を静的に参照しようとしていますが、それが問題です。ClassName.fieldNameこれは、静的な方法でリソースにアクセスしていることを意味します。最初にクラスをインスタンス化してから実行する必要がありますmyReferenceVariable.fieldName

public class example{
    example2 myExample = new example2();
    int s = myExample.v;

これはうまくいくはずです。

また、Java の命名規則では、クラス名が大文字で始まることに注意してください。コンパイルの問題ではなく、読みやすさの問題です。

于 2013-01-04T02:04:11.647 に答える
0

いいえ、s間違いなく静的ではありません。しかし、どちらでもありませんv。これは、コンパイラがあなたに伝えていることです。

example2変数は確かにパッケージ スコープであるため、新しいクラスをインスタンス化して直接呼び出すことができます。

new example2().v;

一般に、将来的にはゲッターとセッターを使用したいと思うでしょう。これにより、カプセル化と情報の隠蔽が可能になります。その変数vは、そのパッケージ内の他のクラスによって変更されるように完全に開かれています。

于 2013-01-04T02:06:46.483 に答える