簡體   English   中英

Java - 包含變量的抽象類?

[英]Java - Abstract class to contain variables?

讓抽象類定義實例變量是一種好習慣嗎?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}

然后子類ExternalJavaScript.class將自動獲取源變量,但是如果所有子類本身都定義了源代碼而不是繼承,我覺得讀代碼更容易。

你有什么建議?

/亞當

我會認為這樣的事情要好得多,因為你要添加一個變量,為什么不限制訪問並使其更清晰呢? 你的吸氣劑/安裝者應該按照他們對錫的說法做。

public abstract class ExternalScript extends Script {

    private String source;

    public void setSource(String file) {
        source = file;
    }

    public String getSource() {
        return source;
    }
}

回過頭來回答這個問題,你是否曾經在閱讀它時看看getter / setter代碼的位置? 如果他們都進行了設置,那么在閱讀代碼時你不需要擔心函數的功能。 還有一些其他原因需要考慮:

  • 如果source受到保護(子類可以訪問),那么代碼就會變得混亂:誰在改變變量? 當它是一個對象時,當你需要重構時就變得很難,而一種方法往往會使這一步更容易。
  • 如果你的getter / setter方法沒有獲取和設置,那么將它們描述為其他方法。

總是想想你的班級是否真的是一個不同的東西,這應該有助於決定你是否還需要其他東西。

當然..為什么不呢?
為了提高存儲和維護效率,抽象基類只是為了容納兩個或多個類共同的容納行為和數據的便利。 它是一個實現細節。
但請注意,您沒有使用應該使用接口的抽象基類。 請參閱Interface vs Base類

當然。 抽象類的整個想法是它們可以包含一些您需要包含所有子類的行為或數據。 想想WheeledVehicle的簡單例子 - 它應該有一個numWheels成員變量。 您希望所有子類都具有此變量。 請記住,抽象類在開發API時是一個非常有用的功能,因為它們可以確保擴展API的人不會破壞它。

暫無
暫無

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

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