簡體   English   中英

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

[英]Using Classes within the same named package in Java

我正在嘗試創建存在於名為組件的命名包中的兩個類A和B。 A是一個公共類Window而B是一個公共類Door ,它包含A的一個實例。問題是,使用

javac -classpath . Door.java

,B找不到A。

我知道我可以使此代碼在沒有導入子句的未命名默認包中工作,但是我希望這些文件存在於一個命名類中,以便可以將它們導入其他位置。

我已經向自己證明,如果package components;Door.java將會編譯package components; 這兩個文件中的注釋行都被注釋掉了,但是我確實希望將其作為一個名為components的軟件包使用。

我也嘗試過使用import components.Window; 在B中,但這也不起作用。

//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 /some/base/route/project javac -classpath . components/Door.java (以及javac components/Door.java )應該可以工作。

請注意,您需要從1級最高的是開始為符合類的完全限定包名的目錄中運行命令。 這意味着,如果您從/some/base/route/project/components內部運行命令,它將無法正常工作。

最后,添加import components.Window; 因為兩個類都在同一個包中,並且Window聲明為public ,所以Door類中的Window是無用的,因為Window已經在Door可見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM