[英]Why does this output 0.0 0.0 0.0 0.0 rather than the execute method's return calculations?
[英]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());
}
}
我在這里練習繼承。 第一類獲取輸入,第二類用於加法,第三類用於減法。 我創建了一個第三類的對象。 通過setNum1()
&& setNum1()
傳遞輸入后,當我嘗試打印 add 的返回值時,它會打印 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
方法中分配值。這樣,它將在您創建實例后分配。
double a, b = 0;
double add() {
this.a = getNum1();
this.b = getNum2();
return a + b;
}
有多種方法可以實現這一點。 您還可以在add
方法中傳遞值或創建parameterized constructor
。
我在練習繼承。
那么您是否知道a
和b
(在類calculator
中)是成員變量1並且它們在父類(即類input
)中隱藏了2 個成員變量num1
和num2
。 隱藏會導致問題(正如您所發現的)。 因此,您應該使num1
和num2
protected 3並刪除a
和b
。
考慮以下:
(請注意,我根據Java 命名約定更改了類名。)
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請參閱聲明成員變量(在 Oracle 的 Java 教程中)。
2參考Java中的變量陰影和隱藏
3請參閱控制對類成員的訪問
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.