打印方法的 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 中定义的变量 ab 将始终为 0.0,因为它们是在对象初始化期间设置的,并且仅一次:

  1. 你打电话给new advcalc()
  2. 在初始化期间 double a = getNum1();double b = getNum2(); 被调用
  3. 您调用 setNum1 并在 input 中更改 num1 的值,但 a 保持不变
  4. 你调用add并且ab都是0.0

如果您删除变量 ab 并在 add 中调用 getNum1getNum2 它应该可以工作。您还可以覆盖 calculator 中的 setNum1setNum2 并在那里设置 ab

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.

那么你知道ab(在classcalculator中)是成员变量1并且他们隐藏了2 成员变量num1num2 在父class 中(即class input)。隐藏会导致问题(正如您所发现的)。因此,您应该使 num1num2 protected3 并删除 ab.

考虑以下几点:
(请注意,我根据 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