2012-02-24 51 views
1

我有這個困境,我正在設計一個項目,基本上它會有一個baseclass - > entityclass關係,實體類從基類繼承。現在的基類是抽象的,必須是這樣的:將變量添加到抽象類或子類中?

abstract class MyAbstractClass{ 

//All this methods need to be implemented 
abstract int getHouseId(int id); 
abstract string getHouseName(String s); 

} 

然後,我想這樣做:

public class MyChildClass extends MyAbstractClass{ 

    private int _hId = 0; 
    private String _hName = ""; 

    public int getHouseId(int id) 
    { 
     if(id > _hId) 
     { 
      return _hId; 
     } 
     return id; 
    } 
    public String getHouseName(String s) 
    { 
     if(s.Equals(_hName)) 
     { 
      return _hName; 
     } 
     return s; 
    } 

     //AND YOU HAVE YOUR SETTERS SOMEWHERE HERE 
    } 

現在,請原諒,如果語法錯誤,我只是做了它在飛行中,我的問題是,在抽象類中聲明變量並設置並從那裏獲取內容,或者在子類中創建變量,會更好嗎?我很困惑它,如果在抽象類中使用它,那麼它應該如何在抽象類中聲明,我可以讓它們在那裏私有並添加屬性來獲取值?或者最好是在孩子中使用它們類?。基本上我想強制一組程序員總是使用抽象類作爲他們必須實現的功能..只是對這個概念有點困惑。我試圖谷歌它,但沒有看到很多關於抽象類中的變量和屬性的文章,也許它應該在子類中使用。感謝您的幫助讓我明白這一點。

回答

2

是更好的抽象類聲明的變量和設置,並從那裏得到的東西,或創建在子類中的變量?

這個想法是儘量減少重複。如果你重複每個子類的邏輯和變量,那麼最好在超類中使用它。

...如果在抽象類使用它,又該如何在抽象類中聲明,我可以讓他們私底下並添加屬性來獲取值?

一般實踐是將抽象類中的變量隱藏起來。並使用public/protected getter/setter修改/訪問它們。

基本上我想實施一組程序員總是使用抽象類的,他們已經實現的功能..

所以,在這裏你去。抽象類中有屬性和getter/setter。並且只做那些你希望你的開發者用自己的邏輯實現的抽象方法。

1

抽象類的整體思想是它們可以包含一些你需要包含的所有子類的行爲或數據。所以你可以保持他們私密,然後提供getter和setter。

或者,如果您有需要由所有子類使用的常量,則將它們定義爲public static final。

看一看這裏:

Java - Abstract class to contain variables?

1

這真的取決於你,但是如果某個功能是每個派生類所要求的,那麼將它添加到你的基類中是有意義的。這包括變量,常量,方法等。

創建類abstract並不妨礙您實現getter和setter,您可以將這些變量封裝在基類中,強制派生類調用這些方法以訪問變量。你會發現這是一種常見的做法。你的MyChildClass實際上可能是abstract基類,並會做到這一點。

如果您不需要或想要abstract類中聲明的變量,並且您希望派生類僅包含某些函數的實現,那麼替代方法是將其替換爲interface