1

现在我正在为 OCJP/SCJP 考试做准备。我正在通过

命令行。我只是发现一个问题。

我有两个班级 Class1 和 Class2。两者都在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 目录编译它。

谢谢, Kshitij

4

3 回答 3

3

您不能访问private类外的变量。如果您希望它们可以访问,请将它们更改为 public 或 protectedClass2

执行以下操作

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是私有的Class1,无法被看到Class2

于 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 回答