某公司的雇员分为以下若干类: Employee:这是所有员工总的父类, 属性: 员工的姓名,员工的生日月份。 方法:getSalary(

2023-10-26

代码

/*某公司的雇员分为以下若干类:
        Employee:这是所有员工总的父类,
        属性:
        员工的姓名,员工的生日月份。
        方法:getSalary(intmonth)
        根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。

        SalariedEmployee:
        Employee 的子类,拿固定工资的员工。
        属性:月薪

        HourlyEmployee:
        Employee 的子类, 按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。
        属性:每小时的工资、每月工作的小时数

        SalesEmployee:
        Employee 的子类,销售人员,工资由月销售额和提成率决定。
        属性:月销售额、提成率

        BasePlusSalesEmployee:
        SalesEmployee 的子类,有固定底薪的销售人员,工资 由底薪加上销售提成部分。
        属性:底薪。

        根据要求创建 SalariedEmployee 、 HourlyEmployees 、SaleEmployee 和 BasePlusSalesEmployee四个类的对象各一个,
        并计算某个月这四个对象的工资。

        注意:要求把每个类都做成完全封装,不允许非私有化属性。*/
public class Homework1 {
    public static void main(String[] args) {
        //创建对象
        Employee e1 = new SalariedEmployee("张三", 1, 2500);
        Employee e2 = new HourlyEmployee("李四", 2, 100, 200);
        Employee e3 = new SalesEmployee("赵六", 3, 1000000, 0.01);
        Employee e4 = new BasePlusSalesEmployee("钱七",4,100000, 0.02, 500);

        //获得薪水
        System.out.println(e1.getName() + "的工资是:" + e1.getSalary(4));
        System.out.println(e2.getName() + "的工资是:" + e2.getSalary(4));
        System.out.println(e3.getName() + "的工资是:" + e3.getSalary(4));
        System.out.println(e4.getName() + "的工资是:" + e4.getSalary(4));

    }
}

/*
Employee:这是所有员工总的父类,
        属性:
        员工的姓名,员工的生日月份。
        方法:getSalary(intmonth)
        根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。
*/
abstract class Employee{
    private String name;
    private int month;

    //constructor
    public Employee() {
    }

    public Employee(String name, int month) {
        this.name = name;
        this.month = month;
    }

    //setter and getter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public abstract double getSalary(int month);
}

/*
SalariedEmployee:
        Employee 的子类,拿固定工资的员工。
        属性:月薪
*/
class SalariedEmployee extends Employee{
    //月薪
    private int monthlySalary;

    @Override
    public double getSalary(int month) {
        if (this.getMonth() == month){
            return this.getMonthlySalary() + 100;
        }else{
            return this.getMonthlySalary();
        }
    }

    //constructor
    public SalariedEmployee() {
    }

    public SalariedEmployee(String name, int month, int monthlySalary) {
        super(name, month);
        this.monthlySalary = monthlySalary;
    }

    //setter and getter

    public int getMonthlySalary() {
        return monthlySalary;
    }

    public void setMonthlySalary(int monthlySalary) {
        this.monthlySalary = monthlySalary;
    }
}

/*
 HourlyEmployee:
         Employee 的子类, 按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。
         属性:每小时的工资、每月工作的小时数
*/
class HourlyEmployee extends Employee{
    //小时工资
    int hourlyPayment;
    //每月工作小时数
    int workHour;

    @Override
    public double getSalary(int month) {
        if (this.getWorkHour() > 160){
            if (this.getMonth() == month){
                return getHourlyPayment()*160 + getHourlyPayment()*(getWorkHour()-160)*1.5 + 100;
            }
            return getHourlyPayment()*160 + getHourlyPayment()*(getWorkHour()-160)*1.5;
        }
        else{
            if (this.getMonth() == month){
                return getWorkHour()*getHourlyPayment() + 100;
            }
            return getHourlyPayment()*getWorkHour();
        }
    }

    //constructor

    public HourlyEmployee() {
    }

    public HourlyEmployee(String name, int month, int hourlyPayment, int workHour) {
        super(name, month);
        this.hourlyPayment = hourlyPayment;
        this.workHour = workHour;
    }

    //setter and getter

    public int getHourlyPayment() {
        return hourlyPayment;
    }

    public void setHourlyPayment(int hourlyPayment) {
        this.hourlyPayment = hourlyPayment;
    }

    public int getWorkHour() {
        return workHour;
    }

    public void setWorkHour(int workHour) {
        this.workHour = workHour;
    }
}

/*
SalesEmployee:
        Employee 的子类,销售人员,工资由月销售额和提成率决定。
        属性:月销售额、提成率
*/
class SalesEmployee extends Employee{
    private double monthlySale;
    //提成率应在0~1之间
    private double commissionRate;

    //constructor

    public SalesEmployee() {
    }

    public SalesEmployee(String name, int month, double monthlySale, double commissionRate) {
        super(name, month);
        this.monthlySale = monthlySale;
        this.commissionRate = commissionRate;
    }

    //setter and getter


    public double getMonthlySale() {
        return monthlySale;
    }

    public void setMonthlySale(double monthlySale) {
        this.monthlySale = monthlySale;
    }

    public double getCommissionRate() {
        return commissionRate;
    }

    public void setCommissionRate(double commissionRate) {
        this.commissionRate = commissionRate;
    }

    @Override
    public double getSalary(int month) {
        if (this.getMonth() == month){
            return this.getMonthlySale()*this.getCommissionRate() + 100;
        }else{
            return this.getMonthlySale()*this.getCommissionRate();
        }
    }
}

/*
BasePlusSalesEmployee:
        SalesEmployee 的子类,有固定底薪的销售人员,工资 由底薪加上销售提成部分。
        属性:底薪。
*/
class BasePlusSalesEmployee extends SalesEmployee{
    private double baseSalary;

    //constructor

    public BasePlusSalesEmployee() {
    }

    public BasePlusSalesEmployee(String name, int month, double monthlySale, double commissionRate, double baseSalary) {
        super(name, month, monthlySale, commissionRate);
        this.baseSalary = baseSalary;
    }

    //setter and getter

    public double getBaseSalary() {
        return baseSalary;
    }

    public void setBaseSalary(double baseSalary) {
        this.baseSalary = baseSalary;
    }

    //重写父类获得薪水的方法

    @Override
    public double getSalary(int month) {
        if (this.getMonth() == month){
            return this.getBaseSalary() + this.getMonthlySale()*this.getCommissionRate() + 100;
        }else{
            return this.getBaseSalary() + this.getMonthlySale()*this.getCommissionRate();
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

某公司的雇员分为以下若干类: Employee:这是所有员工总的父类, 属性: 员工的姓名,员工的生日月份。 方法:getSalary( 的相关文章

  • 在 PLSQL Oracle 中抛出特定错误消息...在休眠中捕获?

    是否可以在 PL SQL oracle 存储过程中抛出特定的错误消息 并在调用它时在 Hibernate 中捕获它 您可以从 PL SQL 代码中抛出用户定义的错误消息 20000 到 20999 之间的错误代码保留用于用户指定的错误消息
  • Java的JConsole可以用来自动配置内存吗?

    我正在学习JavaJMX https docs oracle com javase tutorial jmx and JConsole http docs oracle com javase 7 docs technotes guides
  • 如何将TabLayout与Recyclerview同步?

    我有一个TabLayout with Recyclerview这样当单击选项卡时Recyclerview滚动到特定位置 我也想要相反的过程 这样当Recyclerview滚动到特定位置 然后该特定选项卡会突出显示 例如 如果有 4 个选项卡
  • 生成固定长度的随机数组[重复]

    这个问题在这里已经有答案了 我只是想更改我的代码 以便每次运行代码时都会生成固定长度 100 个整数的随机数组 而不仅仅是在代码中包含一个预先设置的数组 我对此很陌生 所以只需要正确方向的指导 谢谢 public class Selecti
  • 当线程无法访问所有已用堆时查找 Java 内存泄漏

    我正在研究基于 Java 的大型系统中潜在的内存泄漏 或至少是内存浪费 JVM 运行时的最大堆大小为 5 GB 2 3GB 堆使用量是应用程序的预期基准 可能会有更高的峰值 在我正在调查的过载场景中 堆被填满 使用 Eclipse Memo
  • 当服务器仅从请求中读取标头时,Http 客户端未收到响应

    我在 Java 中搞乱了 HTTP 和套接字 希望你能对此有所了解 当我用 Java SE 11 编写的 HTTP 服务器没有读取整个请求然后响应时 客户端不会收到它或收到错误 这是为什么 在服务器读取整个请求之前 客户端是否无法读取响应
  • 如何将 Google proto 时间戳转换为 Java LocalDate?

    我们需要将 Google Protobuf 时间戳转换为正常日期 在这种情况下 有没有办法将 Google Proto 缓冲区时间戳转换为 JavaLocalDate直接地 tl dr 作为 UTC 时刻 转换为java time Inst
  • Spring框架中的DAO和Service层到底是什么?

    Spring框架中的DAO和Service层到底是什么 我正在寻找理论答案 就 Spring 而言 没有区别 按照惯例 您可以使用以下方式标记 DAO 类 Repository和服务 Service 前者还进行一些持久层异常转换 既然您在理
  • 如何使用jsp上传服务器文件夹上的文件[重复]

    这个问题在这里已经有答案了 我正在尝试使用 servlet jsp 将一些图像上传到位于我的服务器上的文件夹中 下面是我的代码 它在我的本地计算机上运行 import java io import java util import java
  • 将分区扩展到另一级

    根据下图来自春季批量文档 http docs spring io spring batch reference html scalability html partitioning 主步骤被划分为六个从步骤 它们是主步骤的相同副本 我的问题
  • 实现一个java UDF并从pyspark调用它

    我需要创建一个在 pyspark python 中使用的 UDF 它使用 java 对象进行内部计算 如果它是一个简单的 python 我会做类似的事情 def f x return 7 fudf pyspark sql functions
  • 尽管设置为 1.7,IntelliJ IDEA 13 仍使用 Java 1.5

    尽管在所有项目设置中指定了 JDK 1 7 包括File gt Project Structure gt Project Project SDK 则产生以下错误IntelliJ 13当尝试编译一些使用菱形运算符的简单 Java 7 代码时
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 谷歌gson LinkedTreeMap类转换为myclass

    我知道这个问题以前已经被问过 由于我对java和android的新手技能 我一个多星期都无法解决这个问题 我和我的一位朋友正在开发一个 Android 项目 其中有一些类似的事情 最奇怪的部分是 只有当我从 Google Play 商店下载
  • JPA Criteria API 任意数量的联接/子查询

    我需要使用以下实体构建相交类型查询 为了清楚起见 减少了实体 Entity and other stuff public class Member Id private Long id private String name Entity
  • 为什么这个 eclipse 错误显示以及它的解决方案应该是什么

    缺少库 xdoclet 1 2 1 jar 选择 XDoclet 的主目录 1 2 1 为什么这个 eclipse 错误显示以及它的解决方案应该是什么alz 这可能是因为该 jar 没有添加到您的项目构建路径中 请按照以下步骤操作 Righ
  • 如何处理MaxUploadSizeExceededException

    MaxUploadSizeExceededException当我上传的文件大小超过允许的最大值时 会出现异常 我想在出现此异常时显示错误消息 如验证错误消息 我该如何处理这个异常 以便在 Spring 3 中执行类似的操作 Thanks 这
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • 返回数据集的 kSoap 和 .Net Web 服务

    我知道使用数据集是一个很大的罪恶 但由于该服务不在我的控制之下 并且创建代理服务的前景是不可能的 我想看看是否有人创建了可以使用 kSoap 序列化器反序列化的类结构 或者我是否吸错了东西 同时要启动它 看看是否可行 以下是预期的结果数据
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些

随机推荐