关于 java 超类和子类的初学者问题
Beginner Question about java superclasses and subclasses
我对 java classes.
中的实例变量有疑问
我有以下classEmployer.java
public class Employee {
String name = "";
public double salary = 0;
public double getEarnings() {
System.out.println("Super Earnings: " + salary);
return salary;
}
}
这是我的经理 class 作为雇主的下属class:
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。
我知道我已经在 superclass 和 subclass 中实例化了 salary 变量,这似乎是导致输出的原因。我只是不明白,为什么 myMan01.salary
没有被 super.getEarnings()
调用。谁能解释一下?
提前致谢,抱歉格式化。还有很多东西要学:)
在您的经理 getEarnings()
方法中 class 我认为您有错字,您 return result + bonus
而不是 salary + bonus
!
而且您不需要 salary
变量,它是从 Employee
class.
继承的
您的代码中没有名为 result
的变量。我想你打错了。
public class Manager extends Employee {
public double bonus;
public double salary = 0;
@Override
public double getEarnings() {
return this.salary + this.bonus;
}
}
创建实例变量 private
访问修饰符并使用 getter & setter[= 总是好的19=] 为每个变量关联的方法。 (OOP 中的封装)
为了将问题标记为已回答,我会背诵一些评论。
这个问题的答案似乎是多态(虽然作为初学者我必须等到我的教科书后面的章节才能完全理解)。
您在这里遇到的问题称为阴影。您有两个完全独立的字段,都命名为 salary。 – chrylis -cautiouslyoptimistic- 1 小时前
可能与 Hiding Fields in Java Inheritance
重复
正如 chrylis -cautiouslyoptimistic- 和 Joe 的评论所述。
我对 java classes.
中的实例变量有疑问我有以下classEmployer.java
public class Employee {
String name = "";
public double salary = 0;
public double getEarnings() {
System.out.println("Super Earnings: " + salary);
return salary;
}
}
这是我的经理 class 作为雇主的下属class:
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。
我知道我已经在 superclass 和 subclass 中实例化了 salary 变量,这似乎是导致输出的原因。我只是不明白,为什么 myMan01.salary
没有被 super.getEarnings()
调用。谁能解释一下?
提前致谢,抱歉格式化。还有很多东西要学:)
在您的经理 getEarnings()
方法中 class 我认为您有错字,您 return result + bonus
而不是 salary + bonus
!
而且您不需要 salary
变量,它是从 Employee
class.
您的代码中没有名为 result
的变量。我想你打错了。
public class Manager extends Employee {
public double bonus;
public double salary = 0;
@Override
public double getEarnings() {
return this.salary + this.bonus;
}
}
创建实例变量 private
访问修饰符并使用 getter & setter[= 总是好的19=] 为每个变量关联的方法。 (OOP 中的封装)
为了将问题标记为已回答,我会背诵一些评论。
这个问题的答案似乎是多态(虽然作为初学者我必须等到我的教科书后面的章节才能完全理解)。
您在这里遇到的问题称为阴影。您有两个完全独立的字段,都命名为 salary。 – chrylis -cautiouslyoptimistic- 1 小时前
可能与 Hiding Fields in Java Inheritance
重复
正如 chrylis -cautiouslyoptimistic- 和 Joe 的评论所述。