2015-03-31 48 views
0

我知道子類除了擁有超級類的公共setter/getter之外,不能訪問私有領域。至今我還沒有任何面嚮對象語言的經驗。我是否應該將所有字段設置爲私有的,並且只需使用公共方法在子類中訪問它們,或者讓它們受到保護並在子類和包中自由使用?Java對私有領域的影響

+0

getter/setter訪問在Java中更傳統。使對象儘可能少變化也是非常好的做法。經過一年的經驗,你會明白爲什麼。 – 2015-03-31 20:29:01

+0

好吧,讓所有的東西都是私人的,甚至在自己的孩子分類器中使用setter getters是一種社會上可以接受的方式? – KrwawyKefir 2015-03-31 20:56:24

+0

如果您製作實用的軟件包,當然不需要這麼做,但要確保所有這些字段都隱藏在包裝以外的直接訪問中。 「到處吸收/設置者」更多地是關於JPA,EJB和其他企業內容。 – 2015-03-31 21:05:33

回答

1

使它們成爲protected。這是此關鍵字存在的唯一目的!

+0

不是。這取決於OP是否在意泄漏內部狀態。 – 2015-03-31 20:33:00

0

子類不繼承其父類的私有成員。但是,如果超類具有訪問其專用字段的公共或受保護方法,那麼這些也可以由子類使用。

嵌套類可以訪問其包含的所有私有成員 類 - 這兩個字段和方法。因此,由子類繼承的公共或受保護的嵌套類可間接訪問超類的所有私有成員。

See the Java Tutorial

+0

@chancea看看他談論繼承的標題 – 2015-03-31 20:26:00

+0

這不是一個答案。 OP正在問一個設計問題,而不是圍繞範圍的規則。 – 2015-03-31 20:33:53

1

OOP還有一個特點encapsulationencapsulation強烈建議我們隱藏從外部世界中的數據。而且你可以通過將字段/屬性/變量隱藏來隱藏數據。

並且對於訪問私有變量使用一些公開的getter方法。

1

這取決於您的需求。如果您需要訪問子類以及相同的包,請將其設爲protected

下面是一般規則:

private:只有一流的訪問。

protected:包訪問和派生類。

default:僅限於相同的包裝。

public:任何人都可以訪問它。