2011-12-19 57 views
0

这个方法是在一个Scores类中,即设置了类变量的分数,但分数是它的子类的组合,例如scores = sub scores1 + sub scores2,sub1/sub2被计算由分数的子类。约束一个超类不能覆盖子类的值

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

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

是有方法/设计技能/实践约束的类不能改变分数值(即运行setScores),后calculateScore()刚跑。

+1

我只是不明白你的问题。举个例子。你应该做一些私人的和/或最终的,但我不明白你想要达到什么目的。 – 2011-12-19 09:08:44

回答

0

您可以使用标志calculated,如果属实,则在setScores(...)中引发异常。请注意,这种方法只会在运行时强制执行此约束,您可能会错过在测试中抛出异常的情况。

通常情况下,在编译时强制约束是有利的,但我们需要一些更多的信息。以下是基于对其他约束的猜测的一个想法:

如果您希望setScores(...)仅被调用一次,那么您也可以将分数传递给构造函数。在这种情况下,你要么完全摆脱setScores(...)或使其处于保护状态,以便只允许在同一个包中使用此类,子类和类来调用它。

1

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

+0

这很好,但不能适用于我的情况。 – hkguile 2011-12-19 09:56:05