【发布时间】:2018-08-15 23:04:53
【问题描述】:
首先,我是 Java 新手,我还在学习它。我创建了一个覆盖父类方法的子类。 在下面的代码中,我必须使用通过扫描仪对象分配的变量 C 的值。经过调试,我发现变量 C 在开始执行子类中使用的 If else 块时,其值变为零。即使父类不是私有的,我也使用了 getter 和 setter,并使用 super 关键字从父类访问变量的值。这段代码有什么问题?
#Main method
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Salary s = new Salary();
Scanner scan = new Scanner(System.in);
System.out.println("Enter a valid salary: ");
s.c = scan.nextInt();
scan.close();
s.range(1000, 2000);
Bonus b = new Bonus();
b.range(10, 100);
}
}
#parent class
public class Salary {
int c;
public void range(int a, int b){
if((a+b)<c){
System.out.println("Employee has average salary");
}
else if ((a+b)>c) {
System.out.println("Employee is rich");
}
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
}
#SubClass
public class Bonus extends Salary {
@Override
public void range(int a, int b) {
if((a+b)>super.getC()){
System.out.println("Employee is applicable for bonus");
}
else{
System.out.println("Employee is poor");
}
}
我想获取代码来执行写在子类中的 else 块。执行超类中的代码时,c的值变为零。
【问题讨论】:
-
您是否对您有两个实例感到困惑?您的
Salary实例和您的Bonus实例完全不相关。 -
很困惑。如果我删除 else 块并提供满足继承类中 if 块的输入,它实际上会显示正确的输出。
-
除了技术问题:从子类访问父类变量违反了 OOP 中最重要的原则:信息隐藏/封装。您不应该这样做,无论是直接还是通过“getter”方法。
标签: java inheritance superclass