-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;
    }
}

或者有什么想法?

4

1 回答 1

1

我会采用第一种方法,即提供一个可以在派生类中被覆盖以提供不同值的 getter,而不是在我的类中创建受保护的成员,这些成员也是包私有的并且违反了封装原则。

于 2012-09-28T02:34:08.627 回答