我有一个关于java类中示例变量的问题。
我有下面的类employer.java
public class Employee {
String name = "";
public double salary = 0;
public double getEarnings() {
System.out.println("Super Earnings: " + salary);
return salary;
}
}
以下是我的经理类作为雇主的一个子类:
public class Manager extends Employee {
public double bonus;
public double salary = 0;
@Override
public double getEarnings() {
return super.getEarnings() + bonus;
}
}
在main函数中,我尝试设置奖金,代码如下:
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年。
我知道我已经在超类和子类中示例化了salary变量,这似乎导致了输出。我只是不明白,为什么 myMan01.salary
不是由调用的 super.getEarnings()
. 谁能澄清一下吗?
提前谢谢,抱歉格式化。还有很多东西要学:)
4条答案
按热度按时间fdx2calv1#
没有称为
result
在你的代码里。我觉得你打错了。创建示例变量总是好的
private
访问修饰符并对每个变量使用getter和setter方法与之关联(封装(面向对象)cigdeys32#
在你的
getEarnings()
方法在你的经理类我想你有一个输入错误,你返回result + bonus
而不是salary + bonus
!你不需要
salary
变量,它是从Employee
班级。gfttwv5a3#
为了把问题标记为已回答,我将背诵一些评论。
这个问题的答案似乎是多态性(尽管作为一个初学者,我必须等到我的教科书后面的章节才能完全理解)。
这里的问题叫做阴影。您有两个完全不同的字段,均命名为salarychrylis-谨慎乐观-1小时前
java继承中隐藏字段的可能重复
正如chrylis-谨慎的光学学家-和joe的评论所说。
eqqqjvef4#
注解掉下面显示的行以获得预期结果:
这个
double salary
在Manager
正在隐藏double salary
在Employee
班级。这个问题也存在于同一个主题上。您还可以检查这个以获得更多示例。