4、阻止方法重写 老师请你检查下代码逻辑是否正确
来源:11-14 测评作业

unbreakable_全栈
2024-11-30
package com.imooc.polymorhism;
public class 总公司 {
private String 员工姓名;
private String 绩效等级;
private double 月工资;
public 总公司(String 员工姓名, String 绩效等级, double 月工资) {
this.员工姓名 = 员工姓名;
this.绩效等级 = 绩效等级;
this.月工资 = 月工资;
}
// 使用 final 关键字防止子类重写此方法
public final double 计算奖金() {
double 奖金 = 0;
switch (绩效等级) {
case "A":
奖金 = 月工资 * 0.9 * 3;
break;
case "B":
奖金 = 月工资 * 0.9 * 2;
break;
case "C":
奖金 = 月工资 * 0.9;
break;
case "D":
奖金 = 月工资 * 0.9 * 0.5;
break;
case "E":
奖金 = 0;
break;
default:
System.out.println("无效的绩效等级");
}
return 奖金;
}
@Override
public String toString() {
return 员工姓名 + ", 绩效等级: " + 绩效等级 + ", 奖金: " + 计算奖金() + "元";
}
}
package com.imooc.polymorhism;
public class 分公司 extends 总公司 {
public 分公司(String 员工姓名, String 绩效等级, double 月工资) {
super(员工姓名, 绩效等级, 月工资);
}
// 由于总公司中的计算奖金方法被声明为final,这里不能重写
}
package com.imooc.polymorhism;
public class Test {
public static void main(String[] args) {
总公司 小慕 = new 总公司("小慕", "C", 8000);
分公司 大毛 = new 分公司("大毛", "A", 9000);
System.out.println(小慕);
System.out.println(大毛);
}
}
写回答
1回答
-
彭彭老师
2024-12-01
计算奖金的逻辑没有问题,阻止方法重写也正确使用了 final 关键字,同学的作业有以下两点可以优化
1、类名、变量名、方法名不要使用中文,命名规则咱们在第三章有讲解
2、测试类中,由对象调用“计算奖金”方法,一般不通过打印对象的方式获取奖金计算结果
/** * 测试类 */ public class Test { public static void main(String[] args) { SubCompany xiaomu = new SubCompany("小慕", 8000, "C"); xiaomu.calcBonus(); SubCompany damao = new SubCompany("大毛", 9000, "A"); damao.calcBonus(); } }
/** * 计算奖金等级 * final关键字防止子类重写此方法 */ public final double calcBonus() { double bonus = 0; // 奖金 switch (scale) { case "A": bonus = salary * 0.9 * 3; break; case "B": bonus = salary * 0.9 * 2; break; case "C": bonus = salary * 0.9; break; case "D": bonus = salary * 0.9 * 0.5; break; case "E": bonus = 0; break; default: System.out.println("无效的绩效等级"); } System.out.println(this.name + ", 绩效等级: " + scale +", 奖金: " + bonus + "元"); return bonus; }
00
相似问题