我發現,我能做到這樣,在子類:從子類更改父實例變量的值
ParentClass.variable = value;
但有人告訴我,這是更好的做法是使用get /設置方法並且不能直接訪問類之外的變量。雖然這是爲了當我在另一個類中有一個類的實例,而不是爲了子類和超類。
那麼有沒有更好的方法來做到這一點,哪種方式通常被認爲是最佳做法?
我發現,我能做到這樣,在子類:從子類更改父實例變量的值
ParentClass.variable = value;
但有人告訴我,這是更好的做法是使用get /設置方法並且不能直接訪問類之外的變量。雖然這是爲了當我在另一個類中有一個類的實例,而不是爲了子類和超類。
那麼有沒有更好的方法來做到這一點,哪種方式通常被認爲是最佳做法?
您有很多選擇。
super.field = x
你必須有訪問現場要做到這一點field = x
你必須有接入到外地去做到這一點。您也不能在孩子中擁有另一個field
,或者只有孩子會被設置。setParentField(x)
我想說這是做到這一點的第二好方法。x = callChildMethod()
此代碼可以在父代中。孩子有返回結果的實現。如果這是可能的,這是最好的辦法。見template method pattern實例變量,你可以做以下的在子類中的方法:
this.variable = value;
這是完全正常的。要修改其他類的實例,最好使用getters和setter。
的確,您應該防止其他類直接修改實例變量;在這種情況下,最好使用getter和setter。但是在一個子類中,你可以直接修改實例變量。
的OOP原則之一是encapsulations
擁有最佳實踐的代碼,並具有專有的成員/變量,然後用setter方法訪問它們/干將是實現封裝的方式。
如果在超類中有任何私有成員,那麼使用setter和getter方法是因爲我們不能在其子類中使用私有成員。
如果有任何靜態實例成員,可以直接使用類名的幫助。如果它是超級類的實例成員,則嘗試使用super關鍵字訪問/修改該子類中的該成員。你可以在這個關鍵字的幫助下修改,如果你在超類和子類中有同名的實例成員? 然後在這種情況下,使用這個關鍵字JVM將訪問當前的類實例成員,即子類成員。
最好使用get/set方法,而不是直接訪問類外的變量。 – Ingo
這似乎是相關的:http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan
考慮在父母上創建一個受保護的getter。 – shmosel