[英]Java abstract class: protected fields or public set/get methods
如果我有一個抽象類,我打算從中創建子類,那么更好的做法是讓抽象類中的字段受到保護,或者讓子類使用setter和getters嗎? 有利有弊嗎?
例如:
public abstract class MyAbstractClass {
// option A
protected int myProtectedInt;
// option B
private int myPrivateInt;
public void setMyPrivateInt() {}
public int getMyPrivateInt() {}
}
public class MySubClass extends MyAbstractClass {
// etc
}
嗯,這部分是主觀的(取決於場景)和部分偏好。 我個人從來沒有打開田地甚至是兒童班。 在過去,優先考慮受保護(或公共,根據需要)的私人領域的getter和setter幫助了我很多。 雖然它為代碼增加了一些字符,並使代碼看起來不那么直觀,但我可以列出一些我喜歡的方法的優點,可能會說服你開始使用私有字段的getter / setter:
更好的控制:父類確切地知道改變了什么以及訪問了什么。 他們必須使用setter,而不是直接修改字段的子類(或大孩子),為父類提供可能在某一天可能派上用場的可見性
更好的靈活性:只要保留了getter / setter的簽名,父類就可以靈活地改變字段的維護方式,可能計算甚至重構,而不會影響任何子類。
記錄,數據訪問和驗證:getter / setter方法可以具有編程邏輯,用於在訪問或修改之前或之后記錄或檢查數據類型或執行驗證。 您可以添加業務邏輯以確保調用者有權讀取或寫入字段。
更好的描述:方法可以更好地記錄(JavaDocs的方法可以比成員變量的更多解釋)
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.