我正在写一个抽象类,我有一个应该由子类定义的变量(在这种情况下,它是一个在超类中使用的int)。我无法决定是否使用默认值来定义protected
变量,并让子类在构造函数中或通过setter
方法更改该值。或者在父类中定义一个抽象方法,以便所有子类必须实现它并返回它们想要使用的值(然后使用抽象方法访问超级类中的方法)。任何人都可以告诉我,为什么一种方式比另一种更受欢迎?对于应该由子类指定的数据,我应该使用抽象方法还是实例变量?
抽象方法:
public abstract int getValue();
public int getValue() {
return 5;
}
- 优点:
军队子类来思考这个值,并选择他们希望它是什么。
- 缺点:
没有缺省值,所以即使多数子类只是想用相同的值仍然要实现该方法。 (该方法可以由非抽象并返回默认值,但你失去迫使子类来思考价值的优势)
受保护的变量:
protected int value;
public SubClassImpl() {
value = 5;
}
- 优点:
可以定义一个默认值,子类可以忽略它,如果他们不在乎。
- 缺点:子类的
作者没有意识到的变量的存在,所以他们可能会被默认的行为感到惊讶。
值是不可变的吗?如果不是,谁负责改变价值? – 2011-02-01 14:53:55
没有要求该值是不可变的,但我不希望它在创建对象后被更改。 – DaveJohnston 2011-02-01 15:10:45