java - 在 Java 中使用同名包中的类

标签 java class package

我正在尝试创建两个类 A 和 B,它们存在于名为组件的命名包中。 A 是一个公共(public)类 Window,B 是一个公共(public)类 Door,它包含 A 的一个实例。问题是在编译 B 时使用

javac -classpath . Door.java

,B找不到A。

我知道我可以使这段代码在没有导入子句的未命名默认包中工作,但是我希望这些文件存在于一个命名类中,以便它们可以导入到其他地方。

我已经向自己证明,如果 package components; 行从两个文件中都被注释掉了,那么 Door.java 将会编译,但是我确实希望将它作为一个包命名组件。

我也尝试过在 B 中使用 import components.Window; 但这也不起作用。

//class A
package components;
public class Window{
public void rollup(){}
public void rolldown(){}
}

//class B
package components;

public class Door{
    public Window window = new Window();
    public void open(){}
    public void close(){}
}

我当前的代码显示了这一点,表明包 B 当前无法访问包 A。

Door.java:8: error: cannot find symbol
        Window window = new Window();
        ^

如何修复此代码以允许 B 在同名包中创建 A 的实例?

最佳答案

引用以下结构

/some/base/route/project/components
                          |- Window.java
                          |- Door.java

然后,运行 javac -classpath 。 components/Door.java(以及 javac components/Door.java)来自 /some/base/route/project应该可以。

请注意,您需要从第 1 层向上 开始运行命令,该目录开始符合类的完全限定包名称。这意味着,如果您从 /some/base/route/project/components 中运行命令,它将不起作用。

最后,在 Door 类中添加 import components.Window; 是没有用的,因为 WindowDoor 中已经可见> 因为这两个类都在同一个包中并且 Window 被声明为 public

关于java - 在 Java 中使用同名包中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56130068/

相关文章:

java - GWT 和存储 session key

java - 如何将项目从netbeans中的另一个类添加到列表框

java - 从按钮调用java类

java - "Invalid signature file digest"通过Maven添加Janino包出错

python - pip 无法下载 jupyter 的要求

java - 如何测试数组与多个输入数据的相等性

Java/JSP log4j :WARN Please initialize the log4j system properly

java - 为什么此设置 Activity 的 onSharedPreferenceChanged 方法为空?

Java方法不工作,导致程序挂起

java - android中如何显示已安装的应用程序?