在同一个包中编译两个类

时间:2013-08-01 09:57:18

标签: java inheritance package

现在我正准备参加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 direcory编译这个类。

第二课

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

3 个答案:

答案 0 :(得分:2)

您无法访问课程外的private个变量。如果您希望在Class2

中访问它们,请将其更改为公开或受保护

执行以下操作

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

简而言之,

  • 如果要编译打包的java文件,则从包结构开始的目录进行编译。例如在您的情况下javac pack1.Class1.java
  • 尝试启动时,请使用完全限定的类名,例如java pack1.Class2

您可以在how to compile and launch java programs in package structure

上阅读此优秀教程

答案 1 :(得分:1)

我猜您的问题出在Class2

System.out.println(var2);

var2Class1中是私有的,Class2

无法看到它

答案 2 :(得分:0)

编译 -

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

要运行 -

java pack.Class2

正如其他人提到的那样,您无法从其他类访问私有成员。您可以为这些成员提供getter。吸气剂是公开的。

e.g。在Class1 -

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

现在来自Class2,你可以做 -

System.out.println(c.getVar2());