2016-11-15 91 views
0

我是Java的新手,所以如果代碼看起來過於愚蠢,請耐心等待。 :-)從另一個類訪問一個類,都在同一個包中

我想要實現的是簡單的:定義兩個類ClassAClassB,這是同一個包find_class的兩個部分(這也是所在班是目錄的名稱

所以我的文件如下。

ClassA.java

package find_class; 

public class ClassA { 
    public void func() { 

    } 
} 

ClassB.java

package find_class; 

import find_class.ClassA; 

public class ClassB { 
    public static void main(String[] args) { 
     ClassA a = new ClassA(); 
    } 
} 

當我編譯ClassB,我碰到的一些誤區:

find_class$ javac ClassB.java 
ClassB.java:3: error: cannot find symbol 
import find_class.ClassA; 
       ^
    symbol: class ClassA 
    location: package find_class 
ClassB.java:7: error: cannot find symbol 
     ClassA a = new ClassA(); 
     ^
    symbol: class ClassA 
    location: class ClassB 
ClassB.java:7: error: cannot find symbol 
     ClassA a = new ClassA(); 
        ^
    symbol: class ClassA 
    location: class ClassB 
3 errors 

我沒有使用任何IDE和目錄結構如下:

find_class 
    - ClassA.java 
    - ClassB.java 

我究竟做錯了什麼?

+0

刪除導入find_class.ClassA; – bane19

+0

你在使用IDE嗎?一個好的IDE會向你指出這些問題並幫助你解決它們。 –

+0

只需驗證項目構建路徑中的包結構即可。您的類位於find_class目錄中,但它將作爲/ project/src在您的構建路徑中 – Zia

回答

3

包名和類路徑應該同步。換句話說,包名是類路徑的延續。

例如,如果文件夾結構是X/Y/Z,類路徑是X/Y,和包名是Z,那麼你不應該導入YZ

應用相同的邏輯來你情況下,你的類路徑已經設置爲「find_class」。所以,你不需要導入語句。

+0

那麼,默認情況下類路徑被設置爲當前目錄?實際上,刪除導入語句和包語句都可以工作。 – dotslash

+0

類路徑是你可以顯式設置的東西:https://docs.oracle.com/javase/tutorial/essential/environment/paths.html – attaboy182

0

你的類表示它在Package「find_class」中,該類知道其包中的所有其他類,因此不需要導入ClassA,因爲它可以看到它。

刪除線

import find_class.ClassA; 
+1

如何刪除多餘的導入修復他的問題?這個問題在別的地方。 – Tom

+0

@Tom正是我的觀點!順便說一句,刪除'package'聲明似乎可行,但看起來很奇怪。這是它應該如何? – dotslash

+0

@dotslash你爲編譯提供了一個類路徑,對吧? – Tom

0

,如果你想使用其他類方法像你這樣,你應該使用對象不需要導入其他class.For例子。

ClassA a = new ClassA(); 

通過ü不能導入類如果在同一個包的方式。

+2

*「順便說一句,你不能導入類,如果有相同的包。」* *不能*是錯的。不禁止這樣做。 – Tom