首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中使用同一个命名包中的类

在Java中使用同一个命名包中的类
EN

Stack Overflow用户
提问于 2019-05-14 12:06:36
回答 1查看 85关注 0票数 4

我正在尝试创建两个类A和B,它们存在于名为components的命名包中。A是公共类Window,B是包含A实例的公共类Door,问题是当使用

代码语言:javascript
复制
javac -classpath . Door.java

,B找不到A。

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

我已经向自己演示了,如果从两个文件中注释掉package components;行,那么package components;将编译,但是我确实希望将其作为一个名为components的包进行编译。

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

代码语言:javascript
复制
//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。

代码语言:javascript
复制
Door.java:8: error: cannot find symbol
        Window window = new Window();
        ^

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 12:22:54

以下列结构为参考

代码语言:javascript
复制
/some/base/route/project/components
                          |- Window.java
                          |- Door.java

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

请注意,您需要从1层开始执行类的完全限定包名称的目录上运行命令。这意味着,如果您从/some/base/route/project/components内部运行该命令,它将无法工作。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56130068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档