2011-04-03 121 views
1

我對類名稱有點困惑。這是我的問題...我試圖在兩個不同的文件中給出相同的類名,並使用默認訪問修飾符即使我嘗試了接口,但它沒有顯示任何錯誤。我想要如何實際訪問它們。關於包中的相同類名和接口名稱

我不明白這些類是如何使用接口將被用於...文件中的類是否在本地文件中首先檢查是否存在類或接口(如果它想使用),然後在包或任何東西else.i我沒有得到任何clarity.If任何一個瞭解我面臨什麼樣的麻煩,我希望能幫助我..... //這是InterfaceTest

package Practice; 

interface t{ 
public void h(); 
public void h1(); 
} 

abstract class InterfaceTest implements t{ 
public void h(){ 

} 
public void h1(){ 

} 
public abstract void t(); 
} 

//這是其他文件InterfaceTest1

package Practice; 
interface t{ 
public void h(); 
public void h2(); 
} 
public class InterfaceTest1 { 
} 

// This is Tes T堆文件

package Practice; 

public class TestStack { 
Test t=new Test(); 
public static void main(String[] args){ 
    TestStack t1=new TestStack(); 
    InterfaceTest it=new InterfaceTest(); 
} 
} 
interface t{ 
public void h3(); 
} 
class Test implements t{ 
public void h3(){ 

} 

public void h1(){ 

} 
public void h2(){ 

} 
} 
class InterfaceTest{ 

} 

在同一封裝中使用這三個文件,但我沒有得到在名稱衝突的任何錯誤

+0

您是否收到任何錯誤? – 2011-04-03 18:39:27

+0

不,我沒有得到任何錯誤克里斯湯普森 – satheesh 2011-04-03 19:58:05

回答

4

這不是很清楚你在說什麼,但我會在它採取刺傷 - 如果我不理解你,請留言。

在Java中,一個類通過它的全限定名來標識。完全限定的名稱是.classname。

例如,如果一個類位於com.foo.bar包中並且名爲MyClass,則完全限定名稱將爲com.foo.bar.MyClass。如果您擁有多個具有相同完全限定名稱的類,則會發生衝突,並且JVM將不知道要使用哪個類。爲了在一個不同的包中使用一個類,你必須import它。你會import上面的類與您的Java文件的頂部說謊謊言import com.foo.bar.MyClass或,如果你想導入整個包,你會使用import com.foo.bar.*,雖然這被認爲是不好的做法。接口的行爲方式相同。與給定類相同的包中的類不需要導入。所以,com.foo.bar包中另一個希望使用MyClass的類,不需要import它。

這對你有幫助嗎?如果你能澄清你的問題,我可以試着幫助你。

編輯要解決您的問題,每個java文件只能有一個頂級公共類。如果您希望在文件中定義其他公共接口或類,則它們必須嵌套在頂級類中。如果您使用了一個類並且沒有完全限定它,編譯器將首先查找具有該名稱的嵌套類,然後使用該名稱在同一個包中查找類。如果它仍然無法找到它,並且你還沒有導入它,那麼它將失敗,並出現類解析錯誤。

編輯2啊我想我明白了。你是否試圖在不同的課堂上使用這些課程?直到它試圖解析具有名稱衝突的類時,編譯器纔會投訴。如果這個類沒有被引用,那麼編譯器不會在意。如果你有兩個MyClass類,但在任何地方都沒有使用,那麼編譯器不會費心去嘗試解決這個類,並且不會注意到這個碰撞。是的,如果您嘗試引用MyClass,則認爲您指的是您所在的課程。

編輯3最後一個嘗試,如果你有MyClass的,然後有嵌套在另一個類,MyClass1的,爲MyClass1的完全合格的名稱是com.foo.bar.MyClass $ MyClass1的,因爲它是作爲嵌套的一部分包內的MyClass的

+0

對不起,這不是我的懷疑希望你會從我編輯的問題 – satheesh 2011-04-03 18:01:05

+0

得到澄清,例如,如果有一個包com.foo.bar,並在該包,如果有一個公共類名稱MyClass(因爲它是公共文件應該是具有相同類名稱的名稱)。在同一個文件中,我們甚至可以保留一些默認類讓它成爲MyClass1.Now我懷疑它沒有顯示任何錯誤,如果我們有MyClass1作爲默認在其他文件....與接口相同....我只是想要這些類的訪問方法 – satheesh 2011-04-03 18:05:58

+0

湯姆森感謝你的努力給我這些答案多次...一旦檢查出我給的代碼...我想你不明白我問的問題(可能是由於溝通不當造成的) – satheesh 2011-04-03 18:29:39

1

接口和類名必須是唯一的:

package foo; 

public interface Bar 
{ 
    void print(); 
} 

class Bat implements Bar 
{ 
    public void print() { System.out.println("Hi there"); } 
} 

你可以有重複的接口或類的名字,如果包是不同的。完全解析的類名稱必須是唯一的。

package other; 

public class Bat 
{ 
    public void doSomething() 
    { 
     System.out.println("And now for something completely different"); 
    } 
} 

UPDATE:

你呈現的示例代碼是荒謬。拋開錯誤的命名約定,您可以在兩個單獨的文件中定義interface t。是什麼讓你覺得你需要複製並粘貼到第二個文件中,一旦你有第一個文件?從包含InterfaceTest1的定義的文件中刪除interface t

所有這些都在相同的package Practice。是什麼讓你一次又一次地繼續定義interface t?你也可以在TestStack的定義中找到它。請考慮一些獨特的名稱,如果這些定義確實是獨一無二的,那麼問題就會消失。

+0

是的,你的禮儀......不好的命名規則,但是......我正在準備scjp考試......所以可能會有這樣的問題 – satheesh 2011-04-03 19:57:11

相關問題