2013-08-01 25 views
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

回答

2

您不能访问外部类private变量。他们更改为公共或protectd如果你希望他们能访问在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

+0

工作。你能用两三行来解释吗? – KSHiTiJ

+0

我已经编辑了相应的答案并添加了一些参考链接 –

+0

请删除上面的代码class1和class2代码。我已经知道私人,公共,受保护和默认的区别。我的错误只涉及编译。你解决它并解释它。请在我接受你的回答后删除它。 – KSHiTiJ

1

本很好的教程,我猜你的问题是在这里Class2

System.out.println(var2); 

var2Class1私人的,有没有办法可以通过Class2可见

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()); 
相关问题