【发布时间】:2021-03-04 14:29:19
【问题描述】:
我对 java 类中的实例变量有疑问。
我有以下类 Employer.java
public class Employee {
String name = "";
public double salary = 0;
public double getEarnings() {
System.out.println("Super Earnings: " + salary);
return salary;
}
}
这是我作为 Employer 子类的 Manager 类:
public class Manager extends Employee {
public double bonus;
public double salary = 0;
@Override
public double getEarnings() {
return super.getEarnings() + bonus;
}
}
在主函数中,我尝试设置奖金,我有以下代码:
public class App {
public static void main(String[] args) throws Exception {
Manager myMan01 = new Manager();
myMan01.name = "Mike";
myMan01.salary = 3000;
myMan01.bonus = 2000;
System.out.println(myMan01.getEarnings());
System.out.println(myMan01.salary);
}
}
我预计输出是 5000。但实际上是 2000。
我知道我已经在超类和子类中实例化了薪水变量,这似乎是导致输出的原因。我只是不明白,为什么myMan01.salary 不被super.getEarnings() 调用。谁能解释一下?
在此先感谢,并对格式表示抱歉。很多东西要学,仍然:)
【问题讨论】:
-
请添加代码,您如何实例化
myMan01实例。您在代码中的何处指定了super.getEarnings()调用? -
Manager#getEarnings()中的result变量是什么?你的意思是salary吗? -
我编辑了那部分。代码有点不同。通过将其更改为简洁,我犯了一个错误。
-
这里的问题叫做shadowing。您有两个完全独立的字段,均名为
salary。
标签: java inheritance instance instance-variables