簡體   English   中英

Java包和訪問修飾符

[英]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類之前編譯ProtectionDerived類。 由於您的Demo類中的代碼使用了Protection和Derived類,因此應該編譯這些類,否則編譯器將無法找到這些類,並且會在Demo類編譯期間生成錯誤。

根據您的類,編譯順序應為:

  1. 保護(獨立課程)
  2. 派生(取決於保護)
  3. 演示(取決於保護和派生)

首先編譯ProtectionDerived 然后編譯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM