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

article/2025/10/10 18:45:34

(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));}}

调试结果图:

 


http://chatgpt.dhexx.cn/article/7eZfAcWG.shtml

相关文章

[Java]封装类

python中的int这样的数据类型已经是类的情况下&#xff0c;老牌的Java当然也有对基本数据类型的类封装 但是Java并没有Python这样激进&#xff0c;Java中的基本数据类型的并不直接是类 而是另外开辟炉灶&#xff0c;创建创建了一一对应的封装类实现 基本数据类型封装类构造方法…

个人简历”的Resume(java封装类)

某公司正进行招聘工作&#xff0c;被招聘人员需要填写个人信息&#xff0c;编写“个人简历”的封装类Resume&#xff0c;并编写测试类进行实现。类图及输出效果如下。 类名&#xff1a;Resume name : String (private) sex : String (private) age : int (private) Resume( …

JAVA封装之封装类及类的使用

目录 封装的概念1.信息隐藏2.属性封装3.方法封装 封装的实例运行结果总结 封装的概念 将东西包在一起&#xff0c;然后以新的完整形式呈现出来&#xff0c;将方法和字段一起包装到一个单元中&#xff0c;单元以类的形式实现 信息隐藏&#xff0c;隐藏对象的实现细节&#xff…

vue axios封装 类方法

1.下载axios npm i axios2.新建utils工具目录 3.创建config.js、、request.js、api.js 一、config.js用于配置不同环境下的baseURL&#xff08;开发环境或者打包环境&#xff09; //config.js export default {baseUrl: {dev: ,pro: } }二、request.js用于封装axios方法&…

简单理解为什么Java要使用封装类

个人学习所用&#xff0c;有错误和不足之处欢迎指出和补充。 目录 前言 基本数据类型与封装类的区别&#xff1a;&#xff08;用 int 和 Integer 举例&#xff09; 为什么要使用封装类&#xff1a; 前言 Java中存在八种基本数据类型&#xff1a;&#xff08;整数型&#xf…

Java 基本数据类型以及封装类

本篇博客内容大部分是借鉴其他博客的&#xff0c;但是在此基础上博主本人修改以及添加了一些内容&#xff0c;也算属于原创&#xff0c;本篇博客仅供博主本人学习参考。 Java基本类型共有八种&#xff0c;基本类型可以分为三类&#xff0c; 字符类型 char&#xff1b; 布尔类…

java 中封装类有哪些_java中封装类(一)

java中封装类共九个,分别是Boolean,Byte,Short,Integer,Long,Float,Double,Character,Void 其中Void对于使用者并无多大意义,也不可以构造任何对象,代码如下: packagejava.lang;public final classVoid {public static final Class TYPE = Class.getPrimitiveClass("vo…

Java包装类(封装类)详解

目录 包装类概念 包装类的继承 基本数据类型——>>包装类 的转换 默认值的区别 包装类——>>基本数据类型 的转换 xxValueof方法 toString方法 区别 自动装箱&#xff1a; 自动拆箱&#xff1a; 基本数据类型、包装类——>String类型 的转换 Sting类型…

Java类的封装

目录 1.什么是类的封装&#xff1f; 2.如何实现类的封装 1.private操作符 2.get与set 1.语法格式 2.封装演示 1.什么是类的封装&#xff1f; 隐藏对象的属性和实现细节&#xff0c;仅对外提供公共访问方式。 类的封装可以让使用者使用更加简单&#xff0c;数据也会更加安…

基本类型的封装类

目 录 1.基本数据类型的封装类 2.int类型的封装类是Integer!其中常用的构造方法有: 3.Integer封装类中常用的方法: 4.封装类的常用操作: 用于基本数据类型与字符串之间的转换. int类型转换为String类型 String类型转换为int类型 (需要注意的是该字符串的字面上…

ubuntu18.04安装虚拟显示器,不接显示器可远程桌面

Overview 主机配置启用远程控制安装软件和支持其它注意事项Reference 主机配置 系统&#xff1a;Ubuntu 18.04显卡&#xff1a;Intel 集成显卡 启用远程控制 注意&#xff0c;如果 teamviewer 是有登录账号&#xff0c;通过账号链接&#xff0c;那么有无上文的 Ubuntu 自带的远…

WIN10系统 Indirect Display 虚拟显示器之特殊应用

by fanxiushu 2020-05-20 转载或引用请注明原始作者。 有人询问我是否可以实现这样一种功能&#xff1a; 对windows输出的每一帧图像数据显示做一些特殊处理&#xff08;比如球形桌面&#xff0c;曲面化等特效&#xff09;&#xff0c;然后再显示到显示器上。 而且还不止一个人…

windows虚拟显示器开发(二)WDDM hook(USB转HDMI驱动、USB手写屏开发)

很久没有继续研究wddm hook了&#xff0c;最后一次研究还在3年前&#xff0c;不得不说虽然应用的少&#xff0c;但是wddm hook却是很有技术含量的一项技术&#xff0c;而且实用性很高&#xff0c;我们除了做虚拟显示器还能做很多的东西&#xff0c;比如高效的截屏&#xff08;因…

Ubuntu20.04 虚拟显示器配置,解决Ubuntu无显示器时nomachine/vnc/Teamviwer等远程终端桌面卡顿问题

&#x1f340;设置虚拟显示屏 安装xserver-xorg sudo apt-get install xserver-xorg-core-hwe-18.04 sudo apt-get install xserver-xorg-video-dummy增加xorg配置文件&#xff0c;通过指令vim /usr/share/X11/xorg.conf.d/xorg.conf&#xff0c;添加以下内容。 Section &qu…

X86工控机虚拟显示器设置(nomachine远程桌面)

前言 使用arm设备不需要设置虚拟显示器&#xff0c;可能已经设置过了。使用X86工控机需要设置虚拟显示器&#xff0c;这里介绍如何设置、如何取消&#xff0c;如何使用远程桌面。 nomachine 一、打开车载主控制器的命令行终端&#xff0c;安装虚拟显示器相关驱动软件。 su…

出现多个虚拟显示器(通用非即插即用监视器)处理办法

导致原因 安装docker软件时进行了一些设置&#xff0c;然后就出现这种情况了 本来想着吧这几个显示器卸载就好了&#xff0c;发现根本没用 然后处理办法如下 首先打开系统应用 打开相关设置里面的 程序和功能 继续 关闭虚拟机平台 ##重启就好了

如何在云电脑串流中实现多屏操作——WDDM虚拟显示器开发

文章目录 如何在云电脑串流中实现多屏操作——WDDM虚拟显示器开发1. 概述2. DxgkInitialize3. HOOK框架4. VIDPN5. 虚拟显示器6. 实现效果 如何在云电脑串流中实现多屏操作——WDDM虚拟显示器开发 “虚拟显示器”是一种新型的计算机图形显示端口技术&#xff0c;它可以将一台计…

ubuntu开机自启vnc虚拟显示器并使用向日葵远程连接

虚拟显示器 设置开机自动解锁 解锁后打开自动登录 1、预安装 依赖 sudo apt-get update sudo apt-get install xfce4 sudo apt install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal ubuntu-desktop sudo apt-get install vnc4server 初始化 在终…

RealVNC Server Ubuntu 20.04 无显示器连接 虚拟显示器

以前尝试过完全不接显示器&#xff0c;vnc连接设置总是不成功&#xff0c;这次很容易做成功了&#xff0c;记录一下。 以前记录的远程桌面使用心得&#xff1a; 远程桌面使用心得_捉不住的鼬鼠的博客-CSDN博客 RealVNC远程连接带显示器模式&#xff1a; Ubuntu18.04使用Rea…

【正版软件】Virtual Display Manager 虚拟显示器布局配置管理软件

前言 根据包括微软研究院在内的许多最新研究&#xff0c;多显示器系统以及更大的显示器可将用户工作效率提高 10% 至 50%。然而&#xff0c;多显示器采用的增长以及大屏幕显示器受到以下几个因素的影响&#xff1a; 购买额外硬件&#xff08;显示器和更新的视频板&#xff09…