簡體   English   中英

Java抽象類:受保護的字段或公共集/獲取方法

[英]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:

  1. 更好的控制:父類確切地知道改變了什么以及訪問了什么。 他們必須使用setter,而不是直接修改字段的子類(或大孩子),為父類提供可能在某一天可能派上用場的可見性

  2. 更好的靈活性:只要保留了getter / setter的簽名,父類就可以靈活地改變字段的維護方式,可能計算甚至重構,而不會影響任何子類。

  3. 記錄,數據訪問和驗證:getter / setter方法可以具有編程邏輯,用於在訪問或修改之前或之后記錄或檢查數據類型或執行驗證。 您可以添加業務邏輯以確保調用者有權讀取或寫入字段。

  4. 更好的描述:方法可以更好地記錄(JavaDocs的方法可以比成員變量的更多解釋)

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM