2011-12-19 8 views
0

このメソッドはクラス変数スコアを設定しますが、スコアはそのサブクラスの組み合わせです。たとえば、scores = sub scores1 + sub scores2、sub1/sub2が計算されますスコアのサブクラスによって。 calculateScoreは()だけで走った後 制約スーパークラスはサブクラスの値をオーバーライドできません

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

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

は、(すなわちsetScoresを実行する)スコア値を変更することはできませんクラスを制約することが方法/設計スキル/練習です。

+1

私はあなたの質問を理解できません。例を挙げる。あなたは何かをプライベートかつ/または最終的にするべきですが、あなたが習得したいものを理解できません。 –

答えて

0

フラグcalculatedを使用できます。それが真の場合は、setScores(...)に例外をスローします。このアプローチでは、実行時にその制約が適用されるだけで、テストで例外が発生する可能性があります。

一般に、コンパイル時に制約を適用するのが望ましいでしょうが、もっと情報が必要です。

setScores(...)を一度しか呼び出さないようにするには、コンストラクタにスコアを渡すこともできます。この場合、setScores(...)を完全に取り除くか、または、同じパッケージ内のこのクラス、サブクラス、クラスだけを呼び出すことができるように、protectedでmakeを行います。

1

両方のメソッドを削除し、計算を実行するためにfinal double getScores(double sub1, double sub2)を実装し、必要な結果を返します。

+0

これはいいですが、私の状況では適用できません。 – hkguile

関連する問題