栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

B接口抽象类工资系统及个人心得理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

B接口抽象类工资系统及个人心得理解

4.编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个
Employee对象的生日,则将该雇员的工资增加100元。
实验说明:
(1)定义一个Employee类,该类包含:
    private成员变量name,number,birthday,其中birthday 为MyDate类的对象;
    abstract方法earnings();
    toString()方法输出对象的name,number和birthday。
(2)MyDate类包含:
    private成员变量year,month,day ;
    toDateString()方法返回日期对应的字符串:xxxx年xx月xx日
(3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处
理。该类包括:private成员变量monthlySalary;
    实现父类的抽象方法earnings(),该方法返回monthlySalary值;toString()方法输
    出员工类型信息及员工的name,number,birthday。
(4)参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:
    private成员变量wage和hour;
    实现父类的抽象方法earnings(),该方法返回wage*hour值;
    toString()方法输出员工类型信息及员工的name,number,birthday。
(5)定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象生日。当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要输出增加工资信息。     
 

public abstract class Employee {
    //定义成员变量
    private String name;
    private String number;
   private String birthday;
   //无参构造和带参构造
    public Employee() {
    }
    public Employee(String name, String number, String birthday) {
        this.name = name;
        this.number = number;
        this.birthday = birthday;
    }
    //提供getset方法
    public String getName() {
        return name;
    }

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

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday=birthday;
    }
    // abstract方法earnings();
    public abstract double earnings();
    //toString()方法输出对象的name,number和birthday
    public String toString(){
        return("");
    }
}
public class HourlyEmployee extends Employee{
    private double wage;
    private double hour;
    //无参带参变量
    public HourlyEmployee() {
    }

    public HourlyEmployee(String name, String number, String birthday, double wage, double hour) {
        super(name, number, birthday);
        this.wage = wage;
        this.hour = hour;
    }
    //提供get,set方法

    public double getWage() {
        return wage;
    }

    public void setWage(double wage) {
        this.wage = wage;
    }

    public double getHour() {
        return hour;
    }

    public void setHour(double hour) {
        this.hour = hour;
    }

    @Override
    public double earnings() {
        return wage*hour;
    }

    @Override
    public String toString() {
        System.out.println("员工的名字为"+getName());
        System.out.println("员工的年龄为"+getNumber());
        System.out.println("员工的生日为"+getBirthday());
        System.out.println("--------------------------------");
        return " ";
    }
}
public class SalariedEmployee extends Employee{
    private double monthlySalary;
    //提供带参和无参构造
    public SalariedEmployee(String name, String number, String birthday, double monthlySalary) {
        super(name, number, birthday);
        this.monthlySalary = monthlySalary;
    }

    public SalariedEmployee() {
    }
    //提供getset方法


    public double getMonthlySalary() {
        return monthlySalary;
    }

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

    //方法重写
    @Override
    public double  earnings() {
        return monthlySalary;
    }

    @Override
    public String toString() {
        System.out.println("员工的名字为"+getName());
        System.out.println("员工的年龄为"+getNumber());
        System.out.println("员工的生日为"+getBirthday());
        System.out.println("员工的每月工资为"+getMonthlySalary());
        System.out.println("--------------------------------");
        return " ";
    }
}
public class SalariedEmployee extends Employee{
    private double monthlySalary;
    //提供带参和无参构造
    public SalariedEmployee(String name, String number, String birthday, double monthlySalary) {
        super(name, number, birthday);
        this.monthlySalary = monthlySalary;
    }

    public SalariedEmployee() {
    }
    //提供getset方法


    public double getMonthlySalary() {
        return monthlySalary;
    }

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

    //方法重写
    @Override
    public double  earnings() {
        return monthlySalary;
    }

    @Override
    public String toString() {
        System.out.println("员工的名字为"+getName());
        System.out.println("员工的年龄为"+getNumber());
        System.out.println("员工的生日为"+getBirthday());
        System.out.println("员工的每月工资为"+getMonthlySalary());
        System.out.println("--------------------------------");
        return " ";
    }
}
public class MyDate {
    //成员变量
    private String year;
    private String month;
    private String day;
    //无参构造,带参构造
    public MyDate() {
    }
    public MyDate(String year, String month, String day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }


//成员方法,提供getset方法

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getMonth() {
        return month;
    }

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

    public String getDay() {
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }
    public String toDateString(){
        return (year+"年"+month+"月"+day+"日");
    }
}
import java.util.Scanner;
public class PayrollSystem{
    public static void main(String[] args) {
        //创建对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入本月月份值");
        String month = sc.nextLine();
        //创建对象完成初始化
        Employee[] e = new Employee[100];
        MyDate m=new MyDate("2019","10","22");
        //完成对数组的输入
        e[0] = new HourlyEmployee("张三","2547",m.toDateString(),842,12);
        MyDate n=new MyDate("1999","6","22");
        e[1]=new SalariedEmployee("王渝","8711",n.toDateString(),8899);
        //通过循环结构,遍历各个成员
        for(int i=0;i<2;i++){
            System.out.println("姓名"+e[i].getName()+"n工号"+e[i].getNumber()+"n生日为"+e[i].getBirthday());
            System.out.println("-------------");
        }
        if(m.getMonth().equals(month)){
            System.out.println("当前月为"+e[0].getName()+"的生日"+"祝你生日快乐");
            System.out.println("工资额外追加500元");
            System.out.println("您的当月薪资为"+(e[0].earnings()+500));
        }
        if(n.getMonth().equals(month)){
            System.out.println("当前月为"+e[1].getName()+"的生日"+"祝你生日快乐");
            System.out.println("工资额外追加500元");
            System.out.println("您的当月薪资为"+(e[1].earnings()+500));
        }
    }
}

该题目的我做了很长的时间,主要在于一点,对通过数组实现父类子类多态形式了解不太深入,之前曾经构想着通过数组调用子类方法birthday无参构造的形式形式,发现这样是不行的,想了很久,主要原因还是在于了数组是采用父类对象构造的,而父类对象中并并没有相关birthday子类的方法,因此我无法通过多态数组的形式调用。那要采取如何使用了,这时联想着多态定义的小知识点,编辑看左边,执行看右边。左边为父类,右边为子类,那么因此呢,在构建多态形式实现数组情况下,对子类部分采取带参构造,当编辑运行的时候,执行中发现右边有这个变量,因此时可以实现调用的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014848.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号