2012-08-28 188 views
0

所以我正在使用一個包裝一些Web服務的單例類。服務的引用存儲爲私有靜態只讀成員。我想要一個非常類似的類,它使用相同的接口來封裝不同的Web服務。如果我從第一類繼承並用新的成員覆蓋私有靜態只讀成員,那麼所有事情都可以像我想的那樣順利進行?所有的繼承函數(一些公有的,一些私有的,一些靜態的)會使用新的引用嗎?私有靜態成員和繼承

我問,因爲我遇到過一些靜態成員繼承之前的怪癖。

回答

5

不,它不會工作。靜態成員被附加到類型,而不是實例,並且不能被覆蓋。如果在派生類中更改靜態值(必須至少爲protected而不是private),這將更改基類和派生類的所有實例的值。

這裏需要注意的重要一點是靜態字段被附加到基本類型。當從派生類派生的類使用與基類所使用的相同的靜態實例時,您不會獲得靜態字段的新副本。

+0

我得到他們被附加到一個類型,但方法被附加到一個實例嗎?如果一個實例是派生類,那麼這些方法不應該與派生類靜態成員一起使用嗎?即使基類中有同名成員? – ForeverNoobie

+0

方法被附加到一個實例,是的,但如果方法與靜態字段(大概是你的Web服務代理)進行交互,那麼這些字段將在派生類和基類的所有實例之間共享(並且因此將展示靜態類行爲)。 –