我创建了一个Directory p1,在其下我写了一个Demo.java程序: -
package p1;
public class Demo {
public static void main(String[] args){
Protection ob1 = new Protection();
Derived ob2 = new Derived();
SamePackage ob3 = new SamePackage();
}
}
在同一目录下,我编写了Program for Protection.java,Derived.java,SamePackage.java,如下所示: -
package p1;
public class Protection {
int n = 1;
private int n_pri = 2;
protected int n_pro = 3;
public int n_pub = 4;
public Protection(){
System.out.println("Base Constructor");
System.out.println("n = " + n);
System.out.println("n_pro = " + n_pro);
System.out.println("n_pub = " + n_pub);
}
}
和
package p1;
class Derived extends Protection {
Derived(){
System.out.println("derived Constructor.");
System.out.println("n = " + n);
System.out.println("n_pro = " + n_pro);
System.out.println("n_pub = " +n_pub);
}
}
和
package p1;
class SamePackage {
SamePackage(){
Protection p = new Protection();
System.out.println("Same Package Constructor");
System.out.println("n = " + p.n);
System.out.println("n_pro = " + p.n_pro);
System.out.println("n_pub = " + p.n_pub);
}
}
但是当我在p1文件夹中执行javac Demo.java时,我收到一个错误,它找不到Protection,Derived和SamePackage符号。在这里我错了什么可能是错的? 任何领导将不胜感激。
答案 0 :(得分:1)
您的问题与访问说明符无关,它与编译期间缺少必需的类有关。
您需要编译Protection
&编译Derived
类之前的Demo
个类。由于您的Demo类中的代码使用了Protection和Derived类,因此应该编译这些类,否则编译器将无法找到这些类,并且会在Demo类编译期间生成错误。
根据您的课程,编译顺序应为:
答案 1 :(得分:1)
首先编译Protection
和Derived
。然后编译Demo
类。
答案 2 :(得分:1)
<强>规则:强>
Compile the composing classes BEFORE compiling the composed classes.
示例:强>
package com.vivek.one;
class A{
}
package com.vivek.two;
class B{
}
package com.vivek.three;
import com.vivek.one.A;
import com.vivek.two.B;
class C{
A a = new A();
B b = new B();
}
<强>编译:强>
javac A.java
javac B.java
javac C.java
<强>运行:强>
java C
答案 3 :(得分:0)
通过exucuting按此顺序编译此命令&gt; javac -d。 FileName.java 强>
Protection-->>SamePackage-->>Derived-->>Demo
在所有文件编译之后使用&gt; java p1.Demo.java
当然它会对你有用
答案 4 :(得分:0)
这里的所有答案都表明我需要按特定顺序编译以解决此问题。
但对我来说有用的是我跑的时候
>javac Demo.java Protection.java SamePackage.java Derived.java
即我同时编译了所有各种依赖源代码。
我现在知道什么有效但现在我的好奇心迫使我知道为什么这有效?我把这作为问题的一部分。