(1) Employee:这是所有员工总的父类。

① 属性:员工的姓名,员工的生日月份

② 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励 100 元。

(2) SalariedEmployee:Employee 的子类,拿固定工资的员工。

① 属性:月薪。

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

① 属性:每小时的工资、每月工作的小时数。

(4) SalesEmployee:Employee 的子类,销售,工资由月销售额和提成率决定。

① 属性:月销售额、提成率。

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

① 属性:底薪。

本题要求根据上述雇员分类,编写一个程序,实现以下功能:

(1)创建一个 Employee 数组,分别创建若干不同的 Employee 对象,并打印某个月的工资。

(2)每个类都完全封装,不允许非私有化属性

代码如下:

父类:

abstract class Employee {
    private String name;
    private int month;

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

public String getName() {
        return name;
    }

public int getMonth() {
        return month;
    }

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

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

public double getSalary(int month) {
        double salary = 0;
        if (this.month == month) {
            salary += 100;
        }
        return salary;
    }
}

固定工资的员工:

class SalariedEmployee extends Employee  {
    private double monthsalary;//月薪
    public SalariedEmployee (String name,int month,double monthsalary){
        super(name,month);
        this.monthsalary =monthsalary ;
    }

public double getMonthsalary() {
        return monthsalary;
    }

public void setMonthsalary(double monthsalary) {
        this.monthsalary = monthsalary;
    }

public double getSalary(int month){
       return monthsalary+super.getSalary(month);
    }
}

按小时拿工资的员工:

public class HourlyEmployee extends Employee {private double hourlysalary;//每小时工资private double monthhourly;//每月小时数public HourlyEmployee (String name,int month,double monthhourly ,double hourlysalary ){super(name,month);this.hourlysalary =hourlysalary ;this.monthhourly =monthhourly ;}public double getHourlysalary() {return hourlysalary;}public void setHourlySalary(double hourlysalary) {this.hourlysalary = hourlysalary;}public double getMonthhourly() {return monthhourly;}public void setMonthhourly(double monthhourly) {this.monthhourly = monthhourly;}public double getSalary(int month) {double salary = 0;if (monthhourly  > 160) {salary = (160 + (monthhourly  - 160) * 3/2) * hourlysalary ;} else {salary = month  * hourlysalary ;}return salary + super.getSalary(month);}
}

销售人员:

public class SalesEmployee extends Employee {private double salasmonth;//月销售额private double commmissionrate;//提成率public SalesEmployee (String name,int month,double salasmonth ,double commmissionrate ){super(name,month);this.commmissionrate =commmissionrate ;this.salasmonth =salasmonth ;}public double getSalasmonth() {return salasmonth;}public double getCommmissionrate() {return commmissionrate;}public void setSalasmonth(double salasmonth) {this.salasmonth = salasmonth;}public void setCommmissionrate(double commmissionrate) {this.commmissionrate = commmissionrate;}@Overridepublic double getSalary(int month) {return commmissionrate *salasmonth +super.getSalary(month);}
}

固定底薪的销售员(销售人员的子类):

public class BasePlusSalesEmployee extends SalesEmployee {private double basesalary;//底薪public BasePlusSalesEmployee (String name,int month,double basesalary,double salasmonth ,double commmissionrate ){super(name,month,salasmonth ,commmissionrate );this.basesalary =basesalary ;}public double getBasesalary() {return basesalary;}public void setBasesalary(double basesalary) {this.basesalary = basesalary;}@Overridepublic double getSalary(int month) {return basesalary +super .getSalary(month);}
}

测试类:

public class Texe {public static void main(String[] args) {Employee stu[]={new SalariedEmployee("李四",7,5000),new HourlyEmployee("张三",8,20,260),new SalesEmployee("王二",7,8000,0.2),new BasePlusSalesEmployee("赵六",9,2000,6000,0.1)};System .out .println("七月份工资:");for(int i=0;i< stu.length ;i++){System .out.println("姓名:"+stu[i].getName()+"   生日月份:"+stu[i].getMonth()+"     工资为:"+  stu[i].getSalary(7));}}

调试结果图:

某公司的员工分为5类,每类员工都有相应的封装类。(黑马第三版Java基础入门 第四章编程题)相关推荐

  1. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  2. Linux中的Java类,Java基础入门学习-Java中类的属性

    Java基础入门学习-Java中类的属性 发布时间:2006-05-27 00:46:15来源:红联作者:WWW Public.private.protected显示了三种类中的属性和服务的类型,pu ...

  3. java基础入门-预定义类与自定义类

    预定义类与自定义类 先上代码 <span style="font-size:14px;">package com.ray.object;import java.util ...

  4. Java核心技术卷Ⅰ-第四章对象和类

    重点 1.使用预定义类 2.方法参数 3.对象构造 4.包 5.类设计技巧 1.使用预定义类 一个源文件只能有一个公共类,可以有任意数目的非公共类 可以使用通配符调用Java编译器:javac Tes ...

  5. 类和对象的特性(C++谭浩强第三版笔记)

    0.0 从程序结构上看:   基于过程的程序中:围绕功能进行的,函数是构成程序的基本部分,程序面对的是一个个函数.   面向对象的程序中:除主函数外,其他函数基本上都出现在"类"中 ...

  6. 三、Java基础工具(1)_常用类——随机数

    2018-05-14 随机数 随机数:随机的生成的任意一个数(理论上) 一.Random类(通过相同的种子,产生的随机数是相同的) Random类用于生成一个伪随机数,它的构造器可以是无参数(以系统时 ...

  7. 三、Java基础工具(1)_常用类——数学相关类

    2018-05-13 数学相关类 一.Math类 Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数.对数.平方根和三角函数.   Math 的方法都被定义为 static 形 ...

  8. Python编程基础 第四章 编程练习 请定义一个Circle类,具体要求为:(1)每个Circle类对象可以存储圆心和半径信息;(2)具有设置圆心和半径的方法SetCenter和SetRadius

    题目内容: 请定义一个Circle类,具体要求为:(1)每个Circle类对象可以存储圆心和半径信息:(2)具有设置圆心和半径的方法SetCenter和SetRadius:(3)具有计算圆面积的方法G ...

  9. Python编程基础 第四章 编程练习 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体;2)具有用于初始化半径和高的构造方法;(3)具有计算圆柱体体积

    题目内容: 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体(包括半径和高):(2)具有用于初始化半径和高的构造方法:(3)具有计算圆柱体体积的方法GetV ...

最新文章

  1. 六个方法查看linux硬盘使用状况
  2. 跳一跳python源码下载_微信跳一跳python代码实现
  3. [剑指offer]面试题3:二维数组中的查找
  4. CF1045G AI robots(动态开点线段树)
  5. portlet java_Java Portlet 规范概述
  6. 如何在 Quagga BGP 路由器中设置 IPv6 的 BGP 对等体和过滤
  7. synchronousqueue场景_【JUC】JDK1.8源码分析之SynchronousQueue(九)
  8. concurrenthashmap获取不到_面试必问的ConcurrentHashMap
  9. python 迭代器的方法_python--魔法方法,属性和迭代器
  10. 06-20210308华为海思Hi3516DV300鸿蒙系统的uboot编译
  11. 渗透实战-guest账户-mimikatz-向日葵-sql提权-离线解密
  12. 双摄像头系列原理深度剖析【转载】
  13. 中国大陆手机号码如何注册谷歌账号?完美解决收不到验证码的问题
  14. 教你如何利用canvas画布绘制哆啦A梦
  15. LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)
  16. 全球及中国雾化铜基粉末行业运营状况与发展动态分析报告2022-2028年
  17. python官网-python中文官网
  18. OllyDbg插件编写
  19. 计算机与信息与计算科学的论文,信息与计算科学专业论文参考文献
  20. 【百日冲大厂】第十篇,牛客网选择题+编程题井字棋+密码强度等级

热门文章

  1. 做笔记,零基础学3D建模快速方法
  2. AHB-SRAMC UVM验证平台搭建
  3. 到底什么是机器学习模型?这篇文章终于讲明白了
  4. cmd运行ping不是内部或外部命令_cmd中用PING命令时,出现'Ping' 不是内部或外部命令 解决方案...
  5. 2016百度春招笔试题(高中熟悉的题现在却变得陌生)
  6. 快乐人生 快乐工作与生活
  7. 作业:对AI音箱做一个竞争态势分析
  8. 12 月活动一览|Hey,今年您 “DevFest” 了吗?
  9. ansible Error - Invalid characters were found in group names but not replaced
  10. matlab中bwareaopen/bwarea/imclearborder/bwboundaries/imregionalmin等边界区域函数