0

「加算、乗算、減算、および除算を行うクラス「電卓」がある場合...「電卓」を拡張する別のクラス「ScientificCalculator」を作成したいが、乗算を使用したくないというシナリオがあります。私のクラス 'ScientificCalculator' を使用する他の開発者が乗算を使用できないようにしたいです。" どうすればこの機能を実現できますか?

わかりました、もっと詳しく説明する必要があります...電卓は私のクラスではありません。他の誰かが作成したものです。私のクラス「Scientific Calculator」の親クラスとして使用しています。Calculator で変更を加えることができません。また、将来私のクラスを使用する人は、親クラスの乗算メソッドを参照するオブジェクトを介して Multiply メソッドを使用できないようにしたいと考えています。–</p>

4

3 に答える 3

3

Calculator クラスを拡張しないでください。ScientificCalculator クラスを作成し、必要なメソッドを提供します。Calculator によって提供されるこれらのメソッドについては、Calculator のインスタンスを呼び出します。それ以外の場合は、独自の実装を記述します。

public class Calculator {
    public double add(...) {}
    public double multiply(...) {}
    public double divide(...) {}
    public double subtract(...) {}
}

public class ScientificCalculator {
    Calculator c = new Calculator();
    public double add(...) { c.add(..) }
    //public double multiply(...) {}
    public double divide(...) { c.divide(..) }
    public double subtract(...) { c.subtract(..) }
    // .. other methods
}
于 2012-07-31T03:35:10.307 に答える
0

別のアプローチ、

メソッドのオーバーライドを防ぐためにfinalキーワードを使用する。

public class Calculator {
   public double add(...) { }
   public double divide(...) { }
   public double subtract(...) {}       
   public final double multiply(...) {}
}

public class ScientificCalculator extends Calculator {
   //other methods here
}
于 2012-07-31T05:31:52.740 に答える
0

私は次のことをお勧めします...

3つの操作だけでインターフェースBaseCalculatorを作成します。

interface BaseCalculator{
  public double add(...) {}
  public double divide(...) {}
  public double subtract(...) {}
}

次に、残りのクラスに同じものを実装します。

public class Calculator implements BaseCalculator {
   public double add(...) { }
   public double divide(...) { }
   public double subtract(...) {}       
   public double multiply(...) {}
}

public class ScientificCalculator implements BaseCalculator {
   public double add(...) { }
   public double divide(...) { }
   public double subtract(...) {}
}

これを使用すると、ScientificCalculatorオブジェクトには乗算を呼び出す方法がありません。

お役に立てれば!

于 2012-07-31T04:54:02.577 に答える