模拟给员工发工资
运用到面向对象的封装、继承、多态,运用到了接口
一、代码实现功能思路
1. 定义员工Employee类。包含属性:姓名,薪资,银行卡余额
Employee.java
package com.feonix;
/**
* 员工类
*
* @author FeoniX
*
*/
public class Employee {
// 姓名
private String name;
// 薪资
private double salary;
// 银行卡余额
private double cardBalance;
/**
* 员工类的无参构造器
*/
public Employee() {
super();
}
/**
* 员工类的有参构造器
*
* @param name 姓名
* @param salary 薪资
* @param cardBalance2 银行卡余额
*/
public Employee(String name, double salary, double cardBalance2) {
this.name = name;
this.salary = salary;
this.cardBalance = cardBalance2;
}
/**
* 计算员工的工资
*
* @return
*/
public double calcMoney() {
return salary;
}
/**
* 获取姓名
*
* @return
*/
public String getName() {
return name;
}
/**
* 设置姓名
*
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取薪资
*
* @return
*/
public double getSalary() {
return salary;
}
/**
* 设置薪资
*
* @param salary
*/
public void setSalary(double salary) {
this.salary = salary;
}
/**
* 获取银行卡余额
*
* @return
*/
public double getCardBalance() {
return cardBalance;
}
/**
* 设置银行卡余额
*
* @param cardBalance
*/
public void setCardBalance(double cardBalance) {
this.cardBalance = cardBalance;
}
}
2. 定义经理Manager类继承Employee类,包含属性:奖金
Manager.java
package com.feonix;
/**
* 经理类 继承 员工类
*
* @author FeoniX
*
*/
public class Manager extends Employee {
// 奖金
private double bonus;
/**
* 经理类的无参构造器
*/
public Manager() {
super();
}
/**
* 经理类的有参构造器
*
* @param name 姓名
* @param salary 薪资
* @param cardBalance 银行卡余额
* @param bonus 奖金
*/
public Manager(String name, double salary, double cardBalance, double bonus) {
super(name, salary, cardBalance);
this.bonus = bonus;
}
/**
* 计算工资
* 经理的工资 = 薪资 + 奖金
*
* @return
*/
@Override
public double calcMoney() {
return getSalary() + bonus;
}
/**
* 获取奖金
*
* @return
*/
public double getBonus() {
return bonus;
}
/**
* 设置奖金
*
* @param bonus
*/
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
3. 定义职员Clerk类继承Employee类
Clerk.java
package com.feonix;
/**
* 职员类 继承 员工类
*
* @author FeoniX
*
*/
public class Clerk extends Employee {
/**
* 职员类的无参构造器
*/
public Clerk() {
super();
}
/**
* 职员类的有参构造器
*
* @param name 姓名
* @param salary 薪资
* @param cardBalance 银行卡余额
*/
public Clerk(String name, double salary, double cardBalance) {
super(name, salary, cardBalance);
}
}
4. 定义Money接口,提供抽象方法salary
Money.java
package com.feonix;
/**
* Money接口
*
* @author FeoniX
*
*/
public interface Money {
/**
* 发工资抽象方法
* @parm employee 需要发工资的员工对象
*/
void salary(Employee employee);
}
5. 定义公司Company类,实现Money接口
Company.java
package com.feonix;
/**
* 公司类 实现 Money接口
*
* @author FeoniX
*
*/
public class Company implements Money {
/**
* 实现发工资方法
*/
@Override
public void salary(Employee employee) {
employee.setCardBalance(employee.getCardBalance() + employee.calcMoney());
}
}
6. 定义测试类,创建公司对象,经理对象,职员对象,调用公司salary方法,给经理和职员发工资
Test.java
public class Test {
public static void main(String[] args) {
Employee manager = new Manager("小明", 9000, 0, 500);
Employee clerk = new Clerk("小亮", 5000, 0);
Company company = new Company();
int max = 6;
for (int i = 0; i <= max; i++) {
System.out.printf("%s的薪资为:%.1f\t\t卡余额是:%.1f\n", manager.getName(), manager.getSalary(),
manager.getCardBalance());
System.out.printf("%s的薪资为:%.1f\t\t卡余额是:%.1f\n", clerk.getName(), clerk.getSalary(), clerk.getCardBalance());
if (i < max) {
System.out.println("=========================" + (i + 1) + "月=========================");
}
company.salary(manager);
company.salary(clerk);
}
}
}