2009-06-09 195 views

回答

112

是的,它可以。但是,每個.java文件只能有一個公共頂級類,公共頂級類必須與源文件具有相同的名稱。

在一個源文件中包含多個類的目的是將相關的支持功能(內部數據結構,支持類等)與主公共類捆綁在一起。請注意,不要這樣做 - 唯一的影響是代碼的可讀性(或不可讀性)。

+1

我認爲這樣做是個不錯的主意,如果你想讓這些額外的類保持私有狀態,那麼以後可以完全改變它們,而不會意外地使用這些類。 – 2009-06-09 05:49:14

+3

它在1.0版本中兼容(在嵌套類之前)。這是該語言的一大錯誤。使用它的最大優勢是IDE有無可救藥的文件處理能力。 – 2009-06-09 08:24:39

+23

每個文件一個公共*頂級*類。只要你喜歡,每個文件可以有許多公共的內部類。 – erickson 2009-06-09 12:43:49

2

是的它可以,但是任何包中只能有一個公共類,因爲java編譯器創建與Public類名稱相同的.Class文件,因此如果它們多於1個公共類,它將是很難爲編譯器選擇什麼應該是Class文件的名字。

15

如果你想實現一個公共類,你必須在一個與該類名稱相同的文件中實現它。一個文件可以包含一個公共類和一些私有類。如果這些類只在公共類內部使用,這很有用。另外公共類也可以包含內部類。

儘管在單個源文件中有一個或多個私有類是好的,但我認爲使用內部類和匿名類更具可讀性。例如人們可以使用匿名類來定義一個公共類中的比較器類:

public static Comparator MyComparator = new Comparator() { 
    public int compare(Object obj, Object anotherObj) { 

    } 
    }; 

比較器類將通常需要一個單獨的文件,以便是公共的。這樣它就與使用它的類捆綁在一起。

4

通常,每個文件應該有一個類。如果你這樣組織事情,那麼當你搜索一個類時,你就知道你只需要搜索這個名字的文件。

當一個類最好使用一個或多個小型輔助類實現時,就是一個例外。通常,當這些類出現在同一個文件中時,代碼最容易遵循。例如,你可能需要一個小的「元組」封裝類來在方法調用之間傳遞一些數據。另一個例子是實現Runnable或Callable的'任務'類。他們可能很小,以至於他們最好與創建和調用它們的父類相結合。

4

除了匿名內部類,另一個用途是實現公共接口的私有內部類(see this article)。外部類可以訪問內部類的所有私有字段和方法。

這使您可以創建兩個緊密耦合的類,例如模型及其視圖,而不公開任何一個的實現。另一個例子是一個集合及其迭代器。

9

是的,儘可能多!

但是,每個文件中只有一個「公共」類。

2

我認爲它應該是「每個.java文件只能有一個非靜態頂級公共類」。 不是嗎?

4

.java文件被稱爲編譯單元。每個編譯單元可以包含任意數量的頂級類和接口。 如果沒有公共頂級類型,那麼編譯單元可以被命名爲任何東西。

//Multiple.java 
//preceding package and import statements 

class MyClass{...} 
interface Service{...} 
... 
//No public classes or interfaces 
... 

在編譯單元中只能有一個公共類/接口。 c.u.必須完全按照這個公共頂級類型命名。

//Test.java 
//named exactly as the public class Test 
public class Test{...} 
//!public class Operations{...} 
interface Selector{...} 
... 
//Other non-public classes/interfaces 

Important points about the main method - part 1

Part 2

(關於部分涉及2類和它們的訪問級別的點數)

1

如果你想實現一個單身,這是一類在應用程序的執行過程中,只有一個內存實例在程序中運行,那麼實現單例的方法之一就是將私有靜態類嵌套到公共類中。然後內部私有類只在其公用方法訪問私有實例時被實例化。

看看這個wiki文章,

https://en.wikipedia.org/wiki/Singleton_pattern

概念需要一段時間來啃。

1

在.java文件中,只能有一個公共頂級類,其名稱與該文件相同,但可能有幾個公共內部類可以導出給所有人並訪問外部類的字段/方法,例如:AlertDialog.Builder(由'public static'修改)AlertDialog(由'public'修改)

1

是您可以在一個.Java文件中包含多個Class。但是你已經讓其中一個公開。並保存與公共類名稱相同的.java文件。當你編譯那個.java文件時,你將得到.java文件中定義的每個類的單獨的.class文件。

除此之外,在一個.java文件中定義多個類的方法太多了。

  1. 使用內部類的概念。
  2. 使用匿名類的概念。
1

是的! .java文件只能包含一個公共類。

如果你希望這兩個類是公開的,它們必須放在兩個.java文件中:A.java和B.java。

1

是的,你可以在一個.java文件中有多個類。其中至多有一個可以公開。其他人是封裝私有的。他們不能是私人的或受保護的。如果一個人是公開的,那麼該文件必須具有該類的名字。否則,可以將ANYTHING作爲其名稱給予該文件。

在一個文件中有許多類意味着這些類在同一個包中。因此,該包內但不包含在該文件中的任何其他類也可以使用這些類。而且,當該包被導入時,導入類也可以使用它們。

如需更詳細的調查,您可以訪問我的博客文章here

3

是200%

例子:

class A { 
void methodDeclaration() { System.out.println("!!!"); } 
} 
class B { 
public static void main(String[] args) { 
new A().methodDeclaration(); 
    } 
} 
4

是的,你可以創建多個公共類,但它必須是一個嵌套類。

public class first { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
    } 

    public class demo1 
    { 

     public class demo2 
     { 

     } 
    } 
} 
0

只能有一個公共類頂級類的文件。該公共類的類名稱應該是文件的名稱。它可以有許多公共的內部類。

您可以在單個文件中包含許多類。對於不同層次的文件級視野的限制如下:

頂級類:
1公共類
0私有類
任意數量的默認/保護類

內類別:
任何數量的內部類別具有任何知名度(默認,私人,保護,公共)

Ple如果我錯了,我會糾正我。

相關問題