Java 包装问题

Java 包装问题,java,class,package,javac,Java,Class,Package,Javac,我们在一个包中用java创建一个类。范例 package p1; class protection{ int a=2; } 然后我们保存这个。使用protection.java和compile,该类可以轻松编译-无错误。然后,我们将同一packge中的另一个类派生,并扩展类保护,并将其保存在derived.java示例中 package p1; class derived extends protection{ derived(){ System.out.println(a); } } 但

我们在一个包中用java创建一个类。范例

package p1;
class protection{
 int a=2;
}
然后我们保存这个。使用protection.java和compile,该类可以轻松编译-无错误。然后,我们将同一packge中的另一个类派生,并扩展类保护,并将其保存在derived.java示例中

package p1;
class derived extends protection{
derived(){
System.out.println(a);
}
}
但当我们编译时,会出现一个错误:

“找不到类Protection”

并且不访问整数a;
但在书中写“同一个包中的子类访问成员”。但这不是编译,也不是访问类。我们如何做到这一点。如果您知道,请帮助我。

如果您在编译时已经在p1中,则会在p1/p1/中搜索另一个类,因为第一个p1是当前目录

javac -cp .. derived.java
我应该这样做

一个更好、更清晰的想法是

cd ..
javac p1/derived.java

然后“派生”和“保护”紧密而和平地生活在一起。

你的两个职业没有问题。请再次检查输入错误(在您的错误消息中,例如,您错误地输入了“protectiion”,尽管类名是“protection”)。对我有效。你是怎么编译的?特别是:输出p1.1到哪里去了?请提供详细、完整的信息。Thanksor是以大写字母开头的保护类名称吗?我制作了一个名为“p1”的子目录,将java文件和ran命令放入其中
javac p1/derived.java
。类文件也在“p1”中。听起来可能是类路径问题。试试javac-classpath。p1/derived.java,以便它可以找到p1/protection.class