在Java中的相同命名包中使用类

时间:2019-05-14 12:06:36

标签: java class package

我试图创建两个存在于名为组件的命名包中的类A和B。 A是一个公共类Window,B是一个公共类Door,其中包含A的一个实例。问题在于,使用

编译B时
javac -classpath . Door.java

,B找不到A。

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

我已经向我自己证明,如果两个文件中的Door.java行都被注释掉,package components;将会编译,但是我确实希望将其作为名为components的包来提供。

我也尝试在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的实例?

1 个答案:

答案 0 :(得分:1)

参考以下结构

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

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

请注意,您需要从1 up 级别开始运行该命令,该目录开始符合类的标准软件包名称。这意味着,如果您从/some/base/route/project/components内部运行命令,它将无法正常工作。

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