约束超类不能覆盖子类的值

时间:2011-12-19 09:05:08

标签: java

此方法在Scores类中,即设置类变量得分,但得分是其子类的组合,例如scores = sub scores1 + sub scores2,sub1 / sub2由得分的子类计算。 / p>

public void setScores (double scores) {
    this.scores = scores;
}

public void calculateScore(double sub1, double sub2) {
    this.scores = (sub1 + sub2) /2;
}

是否有方法/设计技巧/练习来约束类不能改变分数值(即运行setScores),在calculateScore()刚刚运行之后。

2 个答案:

答案 0 :(得分:1)

摆脱这两种方法,并实施final double getScores(double sub1, double sub2)进行计算,并返回所需的结果。

答案 1 :(得分:0)

您可以使用标记calculated,如果为true,则在setScores(...)中抛出异常。请注意,此方法仅在运行时强制执行该约束,并且您可能会错过在测试中抛出异常的情况。

通常,在编译时强制执行约束是有利的,但我们需要更多信息。这是基于对其他约束的猜测的想法:

如果您希望setScores(...)只被调用一次,您也可以将分数传递给构造函数。在这种情况下,你要么完全摆脱setScores(...),要么使用protected来只允许同一个包中的这个类,子类和类来调用它。