2012-09-28 42 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,它可以在派生类中重写以提供不同的值,而不是在我的类中创建受保护的成员,这些成员也是包私有的并违反了封装原则。