2012-09-28 75 views
-1

我有一個關於面向對象編程的問題。 如果在子類中存在具有不同值的屬性。它應該在超類中創建一個抽象訪問器,然後在子類中重寫它。或者在基類中創建一個受保護的實例變量,並在子類構造函數中分配默認值?覆蓋訪問器或賦值構造函數

讓我們來看看代碼示例代碼:

選擇1:

class BaseClass { 
    public abstract int GetFoo(); 
} 

class SubClass { 
    public int GetFoo() { 
     return -1; 
    } 
} 

選擇2:

class BaseClass { 
    protected int _foo; 

    public int GetFoo() { 
     return _foo; 
    } 
} 

class SubClass { 
    public SubClass() { 
     _foo = -1; 
    } 
} 

或者任何想法?

回答

1

我會用第一種方法提供一個getter,它可以在派生類中重寫以提供不同的值,而不是在我的類中創建受保護的成員,這些成員也是包私有的並違反了封裝原則。