2010-11-10 67 views
14

仍然來自C++我發現創建許多小的幫助程序類和對象很麻煩。主要是因爲我必須爲每個類有一個文件。我基本上有一類這樣的:爲什麼每個文件只有一個類

public class mySimpleClass { 
    public float[] numbers = new float[ 4 ]; 
} 

然後,我有這個類:

public class myNotSoSimpleClass { 
    private mySimpleClass; 
    . 
    . 
    . 
} 

這不是那麼簡單的是確定在其自己的文件第二類。然而,簡單的類連接到不那麼簡單的類,它是非常好的,不必在自己的文件中有這麼幾行代碼。

所以總結起來,這是一個能在C++做:

public class myNotSoSimpleClass { 
    private struct mySimpleClass { 
     float numbers[ 4 ]; 
    } myStruct; 
    . 
    . 
    . 
} 

是否有可能嵌入/使用另一個類,或者同一個文件內一個班?如果我可以將這兩個類設置爲一個文件,我會發現使用大型項目​​更容易。或者,Java是每個文件嚴格的一個類,就是這樣,語言?

+5

在Java中,習慣上用大寫字母命名所有類名,並用小寫字母命名所有變量名。你應該調用你的類'MySimpleClass'和'MyNotSoSimpleClass'。 – 2010-11-10 14:21:43

+1

爲什麼你有一個什麼都不做,除了包裝一個數組,這也是一個類? – JeremyP 2010-11-10 15:36:57

+0

@JeremyP:這是一個例子。我的實際簡單類有幾個變量,而我不那麼簡單的類有更多的代碼,包括函數。 – Espen 2010-11-10 15:58:58

回答

14

在另一個類中可能有一個類。在Java中,它被稱爲inner class

+0

這裏的習俗是什麼?使用內部類爲這種助手類或其中一個包私人類? – Espen 2010-11-10 14:29:54

+0

這可以是一個很好的方法,但要確保你不會首先在其他地方需要這門課程。 – 2010-11-10 14:30:07

+1

內部類是一種嵌套類。還有靜態嵌套類。 – 2010-11-10 14:31:20

3

Java允許您創建內部類。也就是說,另一個班級內的班級。這就是你應該把你的幫手類。另一方面,我感到你的痛苦。主要是一個C++編碼器,我自己Java有時會覺得它會迫使你模仿樣板。

15

你可以有多個類在同一個文件,但只有其中一個可以公開:

Java: Multiple class declarations in one file

+0

你可以有公開的內部類,你想說什麼? – 2010-11-10 14:09:14

+6

他根本不是指內層類,而是指其他頂層類。 – 2010-11-10 14:10:52

+0

「只有其中一個可以公開」是不正確的。 – 2010-11-10 14:27:10

4

的規則是每個文件一個頂層公共類。內部類,私人類和其他一些東西被允許

+0

-1錯誤。限制僅限於頂級類。 – 2010-11-10 14:23:38

+0

@Erick:這是如何使他的答案不正確?他說「私人課堂」,我認爲他是指一個不公開的頂級課程。 – Jay 2010-11-10 14:39:17

+0

你可以推測,因爲你明白它是如何工作的。有人在這裏試圖理解不能做出同樣的推定。 – 2010-11-10 17:29:04

5

限制是每個文件只能有一個頂級公共類(儘管你可以嵌套公共類)。正如人們所提到的,你可以在該類中擁有內部/嵌套類。

另一件尚未提及的事情是,只要它是包私有的(只在包中可見),您可以在同一個文件中擁有另一個頂級類。包私有類是沒有訪問修飾符聲明的類。

以下是關於此主題的Effective Java(值得一讀)的一章。 http://books.google.co.uk/books?id=ka2VUBqHiWkC&lpg=PA67&ots=yXKoLnv2TX&dq=Minimize%20the%20accessibility%20of%20classes%20and%20members&pg=PA67#v=onepage&q&f=false

+2

不正確。嵌套類可以是公共的。 – 2010-11-10 15:00:05

+0

啊,我的道歉。忘記了這種情況。我會對我的答案進行編輯。 – Sinjo 2010-11-10 15:03:02

+0

第二段仍然不正確。解決這個問題,我會刪除我的downvote。 – 2010-11-10 16:08:16

0

在Java中有一種叫做嵌套類的東西,閱讀更多about it here

+0

-1格式不正確的答案。 – 2010-11-10 14:23:13

2

在Java中,無法將兩個公共頂級類放入同一個文件中,但此限制不適用於私有/內部類。所以,你可以有類似:

public class MyNotSoSimpleClass { 
    private MySimpleClass mySimpleClass = new MySimpleClass(); 

    private class MySimpleClass { 
     public float numbers[4]; 
     ... 
    } 
.... 

}

+1

這是錯誤的。在同一個源文件中可以有任意多的公共類。在同一個文件中不可能有多個*頂級*類。 – 2010-11-10 14:19:53

+0

顯然。因此私人/內部類。我不是說他們是一回事。根據定義,內部類是不*頂級的... – nosirrahcd 2010-11-10 14:30:02

+0

@Andy:顯然,user468341正在談論頂級類。 – chiccodoro 2010-11-10 14:32:35

3

是的,你可以窩內的另一個類。

與此處的許多答案相反,公衆知名度沒有限制。

嵌套類包括:

  • 靜態嵌套類。
  • 內部類,它有一個隱含指針指向包含類的實例,並且允許訪問其私有部分。
  • 匿名內部類,可以在包含類的方法中創建,不需要名稱。例如,這對於短期事件監聽者來說很方便。

更多細節在這個Oracle tutorial.

9

可作爲其他幾個人所指出的那樣,你可以在一個單一的文件中的任何數量的非公共類的。

要回答「爲什麼」,一個可能的因素是,它使您的類容易找到。如果我在程序中看到Foobar類的引用,我立即知道它必須與當前類在同一個文件中,或者它必須位於名爲Foobar.java的文件中。我可以檢查進口,看看它在什麼目錄。

當我在C或C++程序上工作時,我經常發現自己必須執行Windows文件搜索或Linux grep's才能找到類的源代碼。

當我編寫非常小的程序時,我經常把所有的類放在一個文件中。但是,如果它將超過幾千條線,那麼將其分解出來更容易管理。

當我有一個只被另一個類使用的類時,我經常會把它放在同一個文件中。通常這意味着一個只存在臨時存放一些小數據包的類,比如我需要一個數組或者需要多個字段的東西列表。

+1

與不用搜索就能夠找到代碼的時間相比,爲每個類創建新文件花費的時間很少。您不必查看幾個級別的#includes或嘗試手動解析makefile以查找哪個文件具有哪個類。 +1的解釋。 – 2010-11-10 15:14:32

+0

我看到每個班級都有一個文件。但是,我從來沒有在C++中找到一個類的問題。主要是因爲我認爲我做了適當的命名和命名空間,以及VS中漂亮的右鍵單擊菜單。雖然通過std或者外部庫來看看會是一件沒有它的痛苦。如果這樣說的話,每個人有十個或二十三個班級的文件只是一個麻煩。 – Espen 2010-11-10 15:28:02

+0

@Espen:當然,創建一個單獨的文件只是爲了容納一個小型的課程似乎很愚蠢。但是我回到了我的原始觀點:一致的規則使得所需的源代碼很容易找到。現代的IDE可以提供幫助,但我並不總是使用IDE來查看我的代碼。 – Jay 2010-11-11 14:14:59

相關問題