[英]Java Package and Access Modifier
我創建了一個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符號。 在這里我錯了什么可能是錯的? 任何領導將不勝感激。
您的問題與訪問說明符無關,它與編譯期間缺少必需的類有關。
您需要在編譯Demo
類之前編譯Protection
& Derived
類。 由於您的Demo類中的代碼使用了Protection和Derived類,因此應該編譯這些類,否則編譯器將無法找到這些類,並且會在Demo類編譯期間生成錯誤。
根據您的類,編譯順序應為:
首先編譯Protection
和Derived
。 然后編譯Demo
類。
規則:
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
通過exucuting按此順序編譯此命令> javac -d。 FileName.java
Protection-->>SamePackage-->>Derived-->>Demo
在所有文件編譯之后使用> java p1.Demo.java
當然它會對你有用
這里的所有答案都表明我需要按特定順序編譯才能解決這個問題。
但對我來說有用的是我跑步的時候
>javac Demo.java Protection.java SamePackage.java Derived.java
即我同時編譯了所有各種依賴源代碼。
我現在知道什么有效但現在我的好奇心迫使我知道為什么這有效? 我把這作為問題的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.