0

我正在尝试运行在同一个包中调用保护类的文件 Demo.java,但它给出了错误这是主类。

package p1;
// Instantiate the various classes in p1.
class Demo {
  public static void main(String args[]) {
    Protection ob1 = new Protection();
    //Derived ob2 = new Derived();
    //SamePackage ob3 = new SamePackage();
  }
}

这是我想在主类中使用的类。

package p1;

public class Protection {

  public 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_pri = " + n_pri);
    System.out.println("n_pro = " + n_pro);
    System.out.println("n_pub = " + n_pub);
  }
}

它给出了这个错误:

$ javac Demo.java
Demo.java:6: error: cannot find symbol
Protection ob1 = new Protection();
^
  symbol:   class Protection
  location: class Demo
Demo.java:6: error: cannot find symbol
Protection ob1 = new Protection();
                     ^
  symbol:   class Protection
  location: class Demo
2 errors
error: compilation failed
4

2 回答 2

1

你应该使用javac,java不仅

当您使用 commandjava时,您可以执行一个文件,但只能执行该文件中的类。这里你有几个文件,所以你应该编译它们才能使用它们。

请执行下列操作:

$ mkdir p1
$ mv Demo.java Protection.java p1/
# edit p1/Demo.java to change `class Demo` to `public class Demo`
$ javac p1/*
$ java p1.Demo

这奏效了,结果如下:

base constructor
n = 1
n_pri = 2
n_pro = 3
n_pub = 4
于 2020-08-31T09:08:36.953 回答
0

你可以试试这个:

  1. 在p1中打开cmd,使用javac .\Demo.java .\Protection.java;然后你可以看到生成了两个 .class 文件
  2. 使用cd ..,然后你可以看到你的包p1
  3. 使用java p1.Demo然后你可以看到预期的输出
于 2020-08-31T09:36:41.003 回答