2012-12-12 24 views
-1

例如我有A.java。在A.java我:Java:同一文件中的兩個頂級課程

public class A { 
    // normal 
} 

class B { // cannot declare: public class B 

} 

而且在同一個封裝A.java。我創建C.java,並宣佈:

public class C { 
    public void methodC() { 
     A a = new A(); 
     B b = new B(); // no error -> B is a public class 
    } 
} 

如果我在文件C.java創造新的B類。 C將參考文件C.java中的B類,而不是A.java

class B { 
} 
public class C { 
    public void methodC() { 
     B b = new B(); //this B refer to C.java rather than A.java 
    } 
} 

所以,我在這裏看到了一些問題:在同一個包中,會有兩個相同的類。所以,當我創建D.java時,我怎麼知道哪個B類會被引用?

另一個問題是,當我在A類和C類之外宣佈它時,什麼類型的B類。這一點讓我感到非常沮喪。

謝謝:)

+2

好吧,首先你不能在一個java文件中有兩個公共類。你的c.java永遠不會編譯,因爲你聲明c類和b類都是公共的 – PermGenError

+0

@GanGnaMStYleOverFlowErroR啊,對不起。我用手再次打字,所以我在這裏錯過了這一點。我編輯了我的問題:) – hqt

+0

@GanGnaMStYleOverFlowErroR但是,作爲我的問題,如果它不公開,它可以通過另一個類在另一個文件中調用:(我無法解釋這一點 – hqt

回答

4

當您在A.java已經做到了這一點:

public class A { 
    // normal 
} 

class B { // cannot declare: public class B 

} 

您將無法在同一個C.java在同一個包中定義class B因爲它已經在同一個封裝中存在

class B {   //You won't be able to do this as same class in package exists 

} 
public class C { 
    public void methodC() { 
     B b = new B(); //this B refer to C.java rather than A.java 
    } 
} 

什麼我試過了,下面給我看:

enter image description here

+0

我正在使用Eclipse,並且我沒有遇到錯誤:(我不知道它只是建立C.java,或整個項目 – hqt

+0

我是使用Eclipse和它向我顯示這個錯誤 正如你所說的「**我在這裏看到了一些問題:在同一個包中,將會有兩個相同的類。**」,我認爲這是不對的 – Parth

+0

嘗試再次創建相同的東西,我認爲Eclipse不會允許您在同一個包中創建兩個相同的命名類 – Parth

1

我猜你在過去的代碼片段做了一個錯字(聲明B中公開)。但重要的是你不能在包中定義兩個同名的類。它會引發編譯器錯誤。我已經嘗試過使用IDE,並且該項目指出,由於類B已經定義,所以存在歧義。

1

你會得到重複的類定義。 A.java將被編譯爲A.class和B.class。編譯C.java會導致錯誤或覆蓋B.class。

B類不公開,它是本地包,所以它只能被相同包中的類使用。

爲什麼不創建單獨的類BForA和BForC或什麼?如果您想重用某些內容,請創建一個共享的AbstractB父類。

1

這是在A類中定義的B類是公衆,它是包私人 - 可見只有在它定義的包內。

如果您還要在類D中定義類B,則會出現錯誤:類型B已經定義。

相關問題