某公司的员工分为5类,每类员工都有相应的封装类。(黑马第三版Java基础入门 第四章编程题)
(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基础入门 第四章编程题)相关推荐
- Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25
Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...
- Linux中的Java类,Java基础入门学习-Java中类的属性
Java基础入门学习-Java中类的属性 发布时间:2006-05-27 00:46:15来源:红联作者:WWW Public.private.protected显示了三种类中的属性和服务的类型,pu ...
- java基础入门-预定义类与自定义类
预定义类与自定义类 先上代码 <span style="font-size:14px;">package com.ray.object;import java.util ...
- Java核心技术卷Ⅰ-第四章对象和类
重点 1.使用预定义类 2.方法参数 3.对象构造 4.包 5.类设计技巧 1.使用预定义类 一个源文件只能有一个公共类,可以有任意数目的非公共类 可以使用通配符调用Java编译器:javac Tes ...
- 类和对象的特性(C++谭浩强第三版笔记)
0.0 从程序结构上看: 基于过程的程序中:围绕功能进行的,函数是构成程序的基本部分,程序面对的是一个个函数. 面向对象的程序中:除主函数外,其他函数基本上都出现在"类"中 ...
- 三、Java基础工具(1)_常用类——随机数
2018-05-14 随机数 随机数:随机的生成的任意一个数(理论上) 一.Random类(通过相同的种子,产生的随机数是相同的) Random类用于生成一个伪随机数,它的构造器可以是无参数(以系统时 ...
- 三、Java基础工具(1)_常用类——数学相关类
2018-05-13 数学相关类 一.Math类 Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数.对数.平方根和三角函数. Math 的方法都被定义为 static 形 ...
- Python编程基础 第四章 编程练习 请定义一个Circle类,具体要求为:(1)每个Circle类对象可以存储圆心和半径信息;(2)具有设置圆心和半径的方法SetCenter和SetRadius
题目内容: 请定义一个Circle类,具体要求为:(1)每个Circle类对象可以存储圆心和半径信息:(2)具有设置圆心和半径的方法SetCenter和SetRadius:(3)具有计算圆面积的方法G ...
- Python编程基础 第四章 编程练习 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体;2)具有用于初始化半径和高的构造方法;(3)具有计算圆柱体体积
题目内容: 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体(包括半径和高):(2)具有用于初始化半径和高的构造方法:(3)具有计算圆柱体体积的方法GetV ...
最新文章
- 六个方法查看linux硬盘使用状况
- 跳一跳python源码下载_微信跳一跳python代码实现
- [剑指offer]面试题3:二维数组中的查找
- CF1045G AI robots(动态开点线段树)
- portlet java_Java Portlet 规范概述
- 如何在 Quagga BGP 路由器中设置 IPv6 的 BGP 对等体和过滤
- synchronousqueue场景_【JUC】JDK1.8源码分析之SynchronousQueue(九)
- concurrenthashmap获取不到_面试必问的ConcurrentHashMap
- python 迭代器的方法_python--魔法方法,属性和迭代器
- 06-20210308华为海思Hi3516DV300鸿蒙系统的uboot编译
- 渗透实战-guest账户-mimikatz-向日葵-sql提权-离线解密
- 双摄像头系列原理深度剖析【转载】
- 中国大陆手机号码如何注册谷歌账号?完美解决收不到验证码的问题
- 教你如何利用canvas画布绘制哆啦A梦
- LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)
- 全球及中国雾化铜基粉末行业运营状况与发展动态分析报告2022-2028年
- python官网-python中文官网
- OllyDbg插件编写
- 计算机与信息与计算科学的论文,信息与计算科学专业论文参考文献
- 【百日冲大厂】第十篇,牛客网选择题+编程题井字棋+密码强度等级
热门文章
- 做笔记,零基础学3D建模快速方法
- AHB-SRAMC UVM验证平台搭建
- 到底什么是机器学习模型?这篇文章终于讲明白了
- cmd运行ping不是内部或外部命令_cmd中用PING命令时,出现'Ping' 不是内部或外部命令 解决方案...
- 2016百度春招笔试题(高中熟悉的题现在却变得陌生)
- 快乐人生 快乐工作与生活
- 作业:对AI音箱做一个竞争态势分析
- 12 月活动一览|Hey,今年您 “DevFest” 了吗?
- ansible Error - Invalid characters were found in group names but not replaced
- matlab中bwareaopen/bwarea/imclearborder/bwboundaries/imregionalmin等边界区域函数