0

要求

假设现有类 ICalculator 的可用性,该类对整数算术计算器进行建模并包含:


  • 存储计算器当前 int 值的实例变量 currentValue

  • 方法 add、sub、mul 和 div

    ICalculator 中的每个方法都接收一个 int 参数并将其操作应用于 currentValue 并返回 currentValue 的新值。因此,如果 currentValue 的值为 8 并且 sub(6) 被调用,那么 currentValue 以值 2 结束,并返回 2。

因此,您将基于 ICalculator 编写子类 ICalculator1 的定义。ICalculator1 类有一个附加方法sign,它不接收任何参数,也不修改currentValue。相反,它只是返回 1、0 或 -1,具体取决于 currentValue 分别是正数、零还是负数。

代码:

1 public class ICalculator1 extends ICalculator {
2 public int getCurrentValue() {return currentValue;} //**did not need this line**
3 
4 int sign() {
5 if(currentValue > -1) return 0; //changed to**int val = add(0);**
6 else if(currentValue < 0) return -1; //changed to **if (val > 0) return 1;**
7 else return 1; //changed to **else if (val < 0) return -1;**
8 }}

错误信息:

ICalculator1.java:2: error: currentValue has private access in ICalculator
public int getCurrentValue() {return currentValue;}
                                     ^
ICalculator1.java:5: error: currentValue has private access in ICalculator
if(currentValue > -1) return 0;
   ^
ICalculator1.java:6: error: currentValue has private access in ICalculator
else if(currentValue < 0) return -1;
        ^
3 errors

不知道我做错了什么?

4

1 回答 1

3

所以它接缝currentValue是私有的,因此不能直接在您的子类中访问。由于您的方法实际上返回 的值currentValue,因此您可以在子类中利用它,例如:

public int sign() {
   int val = add(0);   // add 0 and return currentValue
   if (val > 0) return 1;
   else if (val < 0) return -1;
   else return 0;
}

正如其他人所建议的那样,如果您可以修改 的可见性currentValue,使其受到保护,那么您将不需要该add(0)hack。但是,如果您无法修改ICalculator,这是一种可能性。

于 2012-10-26T02:12:48.253 回答