Java基础语法68-抽象类练习

Java基础语法68-抽象类练习

编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个

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对象的生日,还要输出增加工资信息。

提示:

//定义People类型的数组People c1[]=new People[10];

//数组元素赋值

c1[0]=new People(“John”,“0001”,20);

c1[1]=new People(“Bob”,“0002”,19);

//若People有两个子类Student和Officer,则数组元素赋值时,可以使父类类型的数组元素指向子类c1[0]=new Student(“John”,“0001”,20,85.0);

c1[1]=new Officer(“Bob”,“0002”,19,90.5);

package com.java10;
/*
 * 定义一个Employee类,该类包含:
private成员变量name,number,birthday,其中birthday 为MyDate类的对象;
abstract方法earnings();
toString()方法输出对象的name,number和birthday。

 *
 */
public abstract class Employee {
    private String name;
    private int number;
    private MyDate birthday;


    public Employee(String name, int number, MyDate birthday) {
        this.name = name;
        this.number = number;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

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

    public int getNumber() {
        return number;
    }

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

    public MyDate getBirthday() {
        return birthday;
    }

    public void setBirthday(MyDate birthday) {
        this.birthday = birthday;
    }

    public abstract double earnings();

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", number=" + number +
                ", birthday=" + birthday.toDateString() +
                '}';
    }


}
package com.java10;
/*
* 参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:
*
* private成员变量wage和hour;
*
* 实现父类的抽象方法earnings(),该方法返回wage*hour值;
*
* toString()方法输出员工类型信息及员工的name,number,birthday。
* */
public class HourlyEmployee extends Employee{

    private int wage;//每小时的工资
    private int hour;//月工作小时数

    public HourlyEmployee(String name, int number, MyDate birthday) {
        super(name, number, birthday);
    }

    public HourlyEmployee(String name, int number, MyDate birthday,int wage,int hour) {
        super(name, number, birthday);
        this.wage =wage;
        this.hour = hour;
    }

    public int getWage() {
        return wage;
    }

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

    public int getHour() {
        return hour;
    }

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

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



}
package com.java10;
/**
 * MyDate类包含:
 *
 * private成员变量year,month,day ;
 *
 * toDateString()方法返回日期对应的字符串:xxxx年xx月xx日
 */
public class MyDate {
    private int year;
    private int month;
    private int day;

    public int getYear() {
        return year;
    }

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

    public int getMonth() {
        return month;
    }

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

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public String toDateString(){
        return year + "年" + month + "月" + day + "日";
    }

}
package com.java10;

import java.util.Calendar;
import java.util.Scanner;

/*
*  定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类
* 型,name,number,birthday,以及该对象生日。当键盘输入本月月份值时,如果本
* 月是某个Employee对象的生日,还要输出增加工资信息。
* */
public class PayrollSystem {
    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入当前月份:");
//        int month = scanner.nextInt();

        Calendar calendar  = Calendar.getInstance();
        int month = calendar.get(Calendar.MONTH);
        System.out.println(month+1);//一月份:0

        Employee[] emp = new Employee[2];

        emp[0] = new SalariedEmployee("马森", 1002, new MyDate(1999, 2, 28),10000);
        emp[1] = new HourlyEmployee("潘雨生", 2001, new MyDate(1999,5,6),60,240);
        for (int i = 0; i < emp.length; i++) {
            System.out.println(emp[i]);
            System.out.println("月工资为:"+emp[i].earnings());

            if(month == emp[i].getBirthday().getMonth()){
                System.out.println("生日快乐!奖励100元");
            }
        }


    }
}
package com.java10;

/*
 * 定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。该类包括:private成员变量monthlySalary;
 * 实现父类的抽象方法earnings(),该方法返回monthlySalary值;toString()方法输出员工类型信息及员工的name,number,birthday
 *
 * */
public class SalariedEmployee extends Employee {

    private int monthlySalary;

    public int getMonthlySalary() {
        return monthlySalary;
    }

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

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

    @Override
    public double earnings() {
        return monthlySalary;
    }

    @Override
    public String toString() {
        return "SalariedEmployee{" +
                super.toString() +
                '}';
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarxistVive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值