This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center
                            
                        
                    
                
                7年前关闭。
            
        

需求

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


一个实例变量currentValue,用于存储当前的int值
计算器的
方法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


不确定我在做什么错吗?

最佳答案

因此,它表明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,这是一种可能性。

10-07 14:26