此方法在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()刚刚运行之后。
答案 0 :(得分:1)
摆脱这两种方法,并实施final double getScores(double sub1, double sub2)
进行计算,并返回所需的结果。
答案 1 :(得分:0)
您可以使用标记calculated
,如果为true,则在setScores(...)
中抛出异常。请注意,此方法仅在运行时强制执行该约束,并且您可能会错过在测试中抛出异常的情况。
通常,在编译时强制执行约束是有利的,但我们需要更多信息。这是基于对其他约束的猜测的想法:
如果您希望setScores(...)
只被调用一次,您也可以将分数传递给构造函数。在这种情况下,你要么完全摆脱setScores(...)
,要么使用protected来只允许同一个包中的这个类,子类和类来调用它。