Java包和访问修饰符

时间:2013-11-18 05:42:56

标签: java oop package

我创建了一个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符号。在这里我错了什么可能是错的? 任何领导将不胜感激。

5 个答案:

答案 0 :(得分:1)

您的问题与访问说明符无关,它与编译期间缺少必需的类有关。

您需要编译Protection&编译Derived类之前的Demo个类。由于您的Demo类中的代码使用了Protection和Derived类,因此应该编译这些类,否则编译器将无法找到这些类,并且会在Demo类编译期间生成错误。

根据您的课程,编译顺序应为:

  1. 保护(独立课程)
  2. 派生(取决于保护)
  3. 演示(取决于保护和派生)

答案 1 :(得分:1)

首先编译ProtectionDerived。然后编译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

即我同时编译了所有各种依赖源代码。

我现在知道什么有效但现在我的好奇心迫使我知道为什么这有效?我把这作为问题的一部分。