Oop 重写访问器或在构造函数中赋值

Oop 重写访问器或在构造函数中赋值,oop,overriding,accessor,Oop,Overriding,Accessor,我有一个关于面向对象编程的问题。 如果有一个属性在子类中具有不同的值。它应该在超类中创建一个抽象访问器,然后在子类中重写它。或者在基类中创建一个受保护的实例变量,并在子类构造函数中指定默认值 让我们看看代码示例代码: 选择1: class BaseClass { public abstract int GetFoo(); } class SubClass { public int GetFoo() { return -1; } } 选择2: class

我有一个关于面向对象编程的问题。 如果有一个属性在子类中具有不同的值。它应该在超类中创建一个抽象访问器,然后在子类中重写它。或者在基类中创建一个受保护的实例变量,并在子类构造函数中指定默认值

让我们看看代码示例代码:

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

或者有什么想法?

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