现在我正准备参加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
答案 0 :(得分:2)
您无法访问课程外的private
个变量。如果您希望在Class2
执行以下操作
javac pack1/Class1.java
javac pack1/Class2.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);
var2
在Class1
中是私有的,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());