打印方法的 return 值时得到 0.0
Getting 0.0 when printing the return value of a method
class input{
private double num1;
private double num2;
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum1() {
return this.num1;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public double getNum2() {
return this.num2;
}
}
class calculator extends input{
double a = getNum1();
double b = getNum2();
double add() {
return a+b;
}
}
class advcalc extends calculator{
double less() {
return a-b;
}
}
public class Inheritence {
public static void main(String[] args) {
advcalc cal = new advcalc();
cal.setNum1(10);
cal.setNum2(10);
System.out.println(cal.add());
}
}
我在这里练习继承。第一个 class 获取输入,第二个 class 用于加法,第三个用于减法。我创建了一个对象 3rd class。通过 setNum1()
&& setNum1()
传递输入后,当我尝试打印添加的 return 值时,它会打印 0.0。我不知道是什么问题。请有人帮助我。
在您的代码中,在 calculator
中定义的变量 a
和 b
将始终为 0.0
,因为它们是在对象初始化期间设置的,并且仅一次:
- 你打电话给
new advcalc()
- 在初始化期间
double a = getNum1();
和 double b = getNum2();
被调用
- 您调用
setNum1
并在 input
中更改 num1
的值,但 a 保持不变
- 你调用
add
并且a
和b
都是0.0
如果您删除变量 a
和 b
并在 add
中调用 getNum1
和 getNum2
它应该可以工作。您还可以覆盖 calculator
中的 setNum1
和 setNum2
并在那里设置 a
和 b
。
a = getNum()
赋值前正在执行
double a = getNum1();
double b = getNum2();
double add() {
return a+b;
}
除此之外,您还可以在 add
method.This 中分配值,它将在创建实例后分配。
double a, b = 0;
double add() {
this.a = getNum1();
this.b = getNum2();
return a + b;
}
有多种方法可以实现这一点。您还可以在 add
方法中传递值或创建 parameterized constructor
.
I'm practicing inheritance.
那么你知道a
和b
(在classcalculator
中)是成员变量1并且他们隐藏了2 成员变量num1
和num2
在父class 中(即class input
)。隐藏会导致问题(正如您所发现的)。因此,您应该使 num1
和 num2
protected3 并删除 a
和 b
.
考虑以下几点:
(请注意,我根据 Java naming conventions 更改了 class 名称。)
public class Inheritance {
public static void main(String[] args) {
AdvCalc cal = new AdvCalc();
cal.setNum1(10);
cal.setNum2(10);
System.out.println(cal.add());
}
}
class Input {
protected double num1;
protected double num2;
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum1() {
return this.num1;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public double getNum2() {
return this.num2;
}
}
class Calculator extends Input {
public double add() {
return num1 + num2;
}
}
class AdvCalc extends Calculator {
public double less() {
return num1 - num2;
}
}
1 参考 Declaring Member Variables(在 Oracle 的 Java 教程中)。
2参考Variable Shadowing and Hiding in Java
3参考Controlling Access to Members of a Class
class input{
private double num1;
private double num2;
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum1() {
return this.num1;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public double getNum2() {
return this.num2;
}
}
class calculator extends input{
double a = getNum1();
double b = getNum2();
double add() {
return a+b;
}
}
class advcalc extends calculator{
double less() {
return a-b;
}
}
public class Inheritence {
public static void main(String[] args) {
advcalc cal = new advcalc();
cal.setNum1(10);
cal.setNum2(10);
System.out.println(cal.add());
}
}
我在这里练习继承。第一个 class 获取输入,第二个 class 用于加法,第三个用于减法。我创建了一个对象 3rd class。通过 setNum1()
&& setNum1()
传递输入后,当我尝试打印添加的 return 值时,它会打印 0.0。我不知道是什么问题。请有人帮助我。
在您的代码中,在 calculator
中定义的变量 a
和 b
将始终为 0.0
,因为它们是在对象初始化期间设置的,并且仅一次:
- 你打电话给
new advcalc()
- 在初始化期间
double a = getNum1();
和double b = getNum2();
被调用 - 您调用
setNum1
并在input
中更改num1
的值,但 a 保持不变 - 你调用
add
并且a
和b
都是0.0
如果您删除变量 a
和 b
并在 add
中调用 getNum1
和 getNum2
它应该可以工作。您还可以覆盖 calculator
中的 setNum1
和 setNum2
并在那里设置 a
和 b
。
a = getNum()
赋值前正在执行
double a = getNum1();
double b = getNum2();
double add() {
return a+b;
}
除此之外,您还可以在 add
method.This 中分配值,它将在创建实例后分配。
double a, b = 0;
double add() {
this.a = getNum1();
this.b = getNum2();
return a + b;
}
有多种方法可以实现这一点。您还可以在 add
方法中传递值或创建 parameterized constructor
.
I'm practicing inheritance.
那么你知道a
和b
(在classcalculator
中)是成员变量1并且他们隐藏了2 成员变量num1
和num2
在父class 中(即class input
)。隐藏会导致问题(正如您所发现的)。因此,您应该使 num1
和 num2
protected3 并删除 a
和 b
.
考虑以下几点:
(请注意,我根据 Java naming conventions 更改了 class 名称。)
public class Inheritance {
public static void main(String[] args) {
AdvCalc cal = new AdvCalc();
cal.setNum1(10);
cal.setNum2(10);
System.out.println(cal.add());
}
}
class Input {
protected double num1;
protected double num2;
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum1() {
return this.num1;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public double getNum2() {
return this.num2;
}
}
class Calculator extends Input {
public double add() {
return num1 + num2;
}
}
class AdvCalc extends Calculator {
public double less() {
return num1 - num2;
}
}
1 参考 Declaring Member Variables(在 Oracle 的 Java 教程中)。
2参考Variable Shadowing and Hiding in Java
3参考Controlling Access to Members of a Class