簡體   English   中英

Java:同一文件中的兩個頂級類

[英]Java: two top level class in same file

例如我有A.java A.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 ,如何知道將D.java哪個類B?

還有一個問題,當我在A類和C類之外聲明B類的真正類型時,這一點使我感到非常沮喪。

謝謝 :)

當您已經在A.java完成此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
  }
}

我嘗試過的內容如下,它向我展示了這一點:

在此處輸入圖片說明

我猜您在最后一個代碼段中打了錯字(宣布B為公開)。 但是重要的是,您不能在包中定義兩個具有相同名稱的類。 它將引發編譯器錯誤。 我已經使用IDE進行了嘗試,並且該項目表明存在歧義,因為已經定義了B類。

您將獲得重復的類定義。 A.java將被編譯為A.class和B.class。 編譯C.java會導致錯誤或覆蓋B.class。

B類不是公共的,它是本地程序包,因此只能由同一程序包中的類使用。

為什么不創建單獨的類BForA和BForC? 如果要重用某些內容,請創建一個共享的AbstractB父類。

在類A中定義的類B 不是公共的,它是包私有的 -僅在定義它的包內部可見。

當您同時在類D中定義類B時,您將得到一個錯誤:類型B已被定義。

暫無
暫無

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

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