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;
}
0
0

Java零基础入门与实战

Java零基础入门与实战 多场景|多案例|全栈项目

277 学习 · 220 问题

查看课程