Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java继承语法_Java_Inheritance - Fatal编程技术网

Java继承语法

Java继承语法,java,inheritance,Java,Inheritance,要求 假设现有类ICalculator可用,该类为整数算术计算器建模,并包含: 存储当前int值的实例变量currentValue 计算器的功能 方法add、sub、mul和div ICalculator中的每个方法接收一个int参数,并将其操作应用于currentValue,并返回currentValue的新值。因此,如果currentValue的值为8,并且调用了sub(6),那么currentValue将以值2结束,并返回2 因此,您需要基于ICalculator编写子类ICalc

要求

假设现有类ICalculator可用,该类为整数算术计算器建模,并包含:

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

  • 方法add、sub、mul和div

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

因此,您需要基于ICalculator编写子类ICalculator 1的定义。类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
1公共类ICalculator 1扩展ICalculator{
2 public int getCurrentValue(){return currentValue;}/**不需要此行**
3.
4整数符号(){
5如果(currentValue>-1)返回0;//更改为**int val=add(0)**
6 else if(currentValue<0)返回-1;//更改为**if(val>0)返回1**
7 else返回1;//如果(val<0)返回-1,则改为**else**
8 }}
错误消息:

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
ICalculator 1.java:2:错误:currentValue在ICalculator中具有私有访问权限
public int getCurrentValue(){return currentValue;}
^
ICalculator 1.java:5:错误:currentValue在ICalculator中具有私有访问权限
如果(currentValue>-1)返回0;
^
ICalculator 1.java:6:错误:currentValue在ICalculator中具有私有访问权限
如果(currentValue<0),则返回-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;
}
public int-sign(){
int val=add(0);//添加0并返回currentValue
如果(val>0)返回1;
如果(val<0),则返回-1;
否则返回0;
}

正如其他人所建议的,如果您可以修改
currentValue
的可见性,请将其设置为受保护,您就不需要添加(0)hack。但是,如果您无法修改
ICalculator
,这是一种可能性。

因此它认为
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;
}
public int-sign(){
int val=add(0);//添加0并返回currentValue
如果(val>0)返回1;
如果(val<0),则返回-1;
否则返回0;
}

正如其他人所建议的,如果您可以修改
currentValue
的可见性,请将其设置为受保护,您就不需要添加(0)hack。但是,如果您无法修改
ICalculator
,这是一种可能性。

对于第二个错误,您应该实现一个getter。“ICalculator1.java:1:error:class ICalculator1是公共的,应该在名为ICalculator1.java的文件中声明”的哪一部分您不明白吗?其他错误也一样。您应该能够自己找出编译器错误。唯一稍微复杂一点的是iCalculator的“找不到符号”,根据您的文本,这看起来像是一个大写/小写问题。
iCalculator 1.java:5:error:currentValue在iCalculator中具有私有访问权。
。只能从类内访问私有成员,请将属性的可见性更改为“受保护”。答案在错误中。currentValue设置为provate,因此您无法在类中看到它。一种修复方法是将问题字段从
private
更改为
protected
。另一个,如其他人所示,是简单地使用accessor方法。“ICalculator1.java:1:error:class ICalculator1是公共的,应该在名为ICalculator1.java的文件中声明”的哪一部分您不明白吗?其他错误也一样。您应该能够自己找出编译器错误。唯一稍微复杂一点的是iCalculator的“找不到符号”,根据您的文本,这看起来像是一个大写/小写问题。
iCalculator 1.java:5:error:currentValue在iCalculator中具有私有访问权。
。只能从类内访问私有成员,请将属性的可见性更改为“受保护”。答案在错误中。currentValue设置为provate,因此您无法在类中看到它。一种修复方法是将问题字段从
private
更改为
protected
。另一个,如其他人所示,是简单地使用accessor方法。