2013-10-29 47 views
5

我發現,我能做到這樣,在子類:從子類更改父實例變量的值

ParentClass.variable = value; 

但有人告訴我,這是更好的做法是使用get /設置方法並且不能直接訪問類之外的變量。雖然這是爲了當我在另一個類中有一個類的實例,而不是爲了子類和超類。

那麼有沒有更好的方法來做到這一點,哪種方式通常被認爲是最佳做法?

+3

最好使用get/set方法,而不是直接訪問類外的變量。 – Ingo

+0

這似乎是相關的:http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan

+0

考慮在父母上創建一個受保護的getter。 – shmosel

回答

2

您有很多選擇。

  1. super.field = x你必須有訪問現場要做到這一點
  2. field = x你必須有接入到外地去做到這一點。您也不能在孩子中擁有另一個field,或者只有孩子會被設置。
  3. setParentField(x)我想說這是做到這一點的第二好方法。
  4. x = callChildMethod()此代碼可以在父代中。孩子有返回結果的實現。如果這是可能的,這是最好的辦法。見template method pattern
0

實例變量,你可以做以下的在子類中的方法:

this.variable = value; 

這是完全正常的。要修改其他類的實例,最好使用getters和setter。

的確,您應該防止其他類直接修改實例變量;在這種情況下,最好使用getter和setter。但是在一個子類中,你可以直接修改實例變量。

-1

的OOP原則之一是encapsulations擁有最佳實踐的代碼,並具有專有的成員/變量,然後用setter方法訪問它們/干將是實現封裝的方式。

0

你最好的做法是使用getters和setter。更多INFO

可以使用,

ParentClass.variable = value; 

最好soltion取決於需求。

0

如果在超類中有任何私有成員,那麼使用setter和getter方法是因爲我們不能在其子類中使用私有成員。

如果有任何靜態實例成員,可以直接使用類名的幫助。如果它是超級類的實例成員,則嘗試使用super關鍵字訪問/修改該子類中的該成員。你可以在這個關鍵字的幫助下修改,如果你在超類和子類中有同名的實例成員? 然後在這種情況下,使用這個關鍵字JVM將訪問當前的類實例成員,即子類成員。