1

現在、OCJP/SCJP 試験の準備をしています。そして、私はすべてのプログラムを実行しています

コマンドライン。私はただ一つの問題を発見しました。

Class1 と Class2 の 2 つのクラスがあります。どちらもpack1に入っています。

package pack1;

public class Class1
{
        int var1 = 1;
        private int var2 = 2;
        public int var3 = 3;
        protected int var4 = 4;
}

このクラスは pack1 ディレクトリからコンパイルできます。

セカンドクラス

package pack1;
public class Class2 extends Class1
{
        public void accessVars()
        {

                System.out.println(var1);
                System.out.println(var2);
                System.out.println(var3);
                System.out.println(var4);
        }

        public static void main(String args[])
        {
                Class2 c = new Class2();
                c.accessVars();
        }
}

このクラスを pack1 ディレクトリからコンパイルできません。「Class1のシンボルエラーが見つかりません」というメッセージが表示されますが、pack1.Class1をインポートすることで外部からコンパイルできます。

これが起こっている理由はわかっていますが、インポートせずにクラスをコンパイルできる NetBeans をチェックインしました。どのように ?pack1 ディレクトリからコンパイルするにはどうすればよいですか。

ありがとう、クシティジ

4

3 に答える 3

3

privateクラス外の変数にはアクセスできません。でアクセスできるようにする場合は、それらを public または protected に変更します。Class2

次のようにします

javac pack1/Class1.java
javac pack1/Class2.java

要するに、

  • パッケージ化された Java ファイルをコンパイルする場合は、パッケージ構造が始まるディレクトリからコンパイルします。例えばあなたの場合javac pack1.Class1.java
  • それらを起動しようとするときは、完全修飾クラス名を使用してください。java pack1.Class2

パッケージ構造でJavaプログラムをコンパイルして起動する方法については、この優れたチュートリアルを読むことができます

于 2013-08-01T09:59:01.160 に答える
1

あなたの問題はここにあると思いますClass2

System.out.println(var2);

var2は で非公開ですClass1Class2

于 2013-08-01T09:59:21.673 に答える
0

コンパイルする-

javac pack1\Class1.java 
javac pack1\Class2.java 

走る-

java pack.Class2

また、他の人が述べたように、別のクラスからプライベート メンバーにアクセスすることはできません。それらのメンバーにゲッターを与えることができます。ゲッターはパブリックです。

例 Class1-

public int getVar2(){
    return this.var2;
}

Class2からできることは-

System.out.println(c.getVar2());
于 2013-08-01T10:01:51.433 に答える