2017-02-15 78 views
0

在我的Java學習過程中,我嘗試了編譯&成功運行的這段代碼。任何人都可以提供一個解釋,爲什麼編譯器沒有產生任何錯誤?我導入了包含java.util> Scanner的完整軟件包,因此不應該存在Scanner已在util包中定義的錯誤&我試圖在此重新定義它?JavaCompiler在重新定義Java類時沒有發現錯誤。

import java.util.*; 

class Scanner 
{ 
    public static void main(String... args) 
    { 
     Scanner c = new Scanner(); 
    } 
} 

我的Java基礎知識都不是很清楚,所以好心承擔,如果這似乎是完全一個小白的問題,有關於這個論壇都沒有問題,所以我想更好地問它。

+1

名稱在當前編譯單元優先與按需進口進口任何東西。如果您明確導入了'java.util.Scanner',那將會出錯。 –

+0

添加java.util.Scanner導入,你會看到它被標記爲未使用 – c0der

+0

是的,這樣做會引發編譯錯誤。我只是想知道爲什麼在導入整個軟件包時沒有這個功能。 – WhiteSword

回答

-1

一個類不僅由其名稱定義,而且由它的包定義。

你的情況,你有兩個不同的類別:

  • java.util.Scanner的
  • your.package.Scanner(對不起,你的包線是不是你的代碼的一部分)

對於編譯器,這些類是不同的,這就是爲什麼不出現編譯錯誤。

對於代碼示例和可能的用例更長的答案,看看這裏:Importing two classes with same name. How to handle?