2011-10-27 85 views
0

我剛剛開始使用OOP,並且一直在玩Java。我遇到的一個麻煩是決定我是否需要一個特定類的私有實例字段。根據我是否需要創建一個不是私有實例字段的方法,我是否應該使用一個經驗法則?Java中的實例字段聲明

謝謝。

回答

1

如果它是對象的自然組成部分,或者對象需要定期執行某個任務,那麼通過一切手段使它成爲一個屬性。如果它是一個常量,那麼你應該把它作爲一個公共類變量(或者說是一個常量:P)。也就是說,聲明它爲「公共靜態最終w/e」

公共實例變量不常用,因爲它經常會導致更混亂的代碼。按照之前所述的實例變量(或屬性)思考對象狀態。通常情況下,通過對對象進行操作來改變對象的狀態,而不是公開玩弄公衆。祝你好運。

1

那麼,問問自己它是否在邏輯上是對象實例的狀態的一部分。它是關於對象在整個生命週期內有效的東西,還是僅在單個方法過程中適用的東西(在這種情況下,它應該是局部變量)?或者它實際上適用於類本身(在這種情況下,它應該是靜態的)?

如果你可以舉一些你不太確定的例子,那會有幫助。

(請注意,我認爲這裏的選擇是可變的那種 - 靜態,實例或本地實例變量應該差不多總是是專用的:)

0

「避除常量公共領域(本教程中的許多示例使用公共字段,這可能有助於簡潔地說明一些觀點,但不建議用於生產代碼。)公共字段傾向於將您鏈接到特定的實現,並限制您更改代碼的靈活性。 「 Controlling Access to Members of a Class

0

學習面向對象編程時,可以將其視爲一種將真實世界的概念建模爲代碼的方法。名詞成爲對象;並且名詞上或名詞上的動作成爲方法。實例變量是這些名詞的屬性。例如,如果你有一個代表Car的班級,slamOnTheBreaks()將是Driver打電話給休息時間的方法,而Car裏面有一些座位,對吧?所以一個實例變量將是int numberOfSeats;

想想需要知道的實例變量,需要改變的基礎。通過公開numberOfSeats,這將允許Driver改變車內座位的數量,這沒有任何意義。他們只需要知道汽車有多少個座位,當他們上車時他們可以找到,或者說,方法public int getNumberOfSeats()

正如丹尼所說,常量的故事是不同的。如果一個值是一個常量,那麼在程序執行的整個過程中它將保持不變,例如,如果您希望Driver Bob是所有那些CarTruck對象的唯一Driver,那麼最好使用Bob。 ,又名公衆,所以他可以在每個CarTruck(假設在CarTruck之間沒有繼承關係)和b)無法更改。