0

这是一个场景“如果我有一个类‘计算器’,它可以做加法、乘法、减法和除法......我想创建另一个类‘ScientificCalculator’来扩展‘计算器’,但我不想使用乘法,我想确保任何其他使用我的类 'ScientificCalculator' 的开发人员都不能使用乘法“我怎样才能实现这个功能?

好的,我需要更详细一点...计算器不是我的课程它是由其他人制作的,我只是将它用作我的课程“科学计算器”的父类。我无法在计算器中进行任何更改。而且我希望将来使用我的类的任何人都不能通过引用我父类的乘法方法的对象来使用乘法方法。——</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

我会推荐以下...

创建一个BaseCalculator只有 3 个操作的接口。

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 回答
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 回答