需求:长安汽车员工管理系统。
* 该项目有一个Employee员工基类,其下有3个工厂员工子类,分别为:EmployeeFactory1、
* EmployeeFactory2、EmployeeFactory3
* 1. 所有工人都有 上班打卡方法clockIn()(所有员工打卡方式相同)
* 2. 所有工人都有 下班打卡方法clockOut()(所有员工打卡方式相同)
* 3. 但是每个工厂的子类中工作的方法work()都不同(强制重写)
*
* 并且
* 4. 工厂1员工可以微信支付和支付宝支付(需要声明两个接口,每个接口分别有一个支付方法)
* 5. 工厂2员工只能支付宝支付
* 请编程设计该程序实现
/**
* 抽象基类:员工类
*
*/
public abstract class AbstractEmployee {
/**
* 上班打卡方法
*/
public void clockIn() {
System.out.println("上班打卡");
}
/**
* 下班打卡方法
*/
public void clockOut() {
System.out.println("下班打卡");
}
/**
* 工作抽象方法
*/
public abstract void work();
}
/**
* 工厂1员工子类EmployeeFactory1
*/
public class EmployeeFactory1 extends AbstractEmployee implements IWeChatPay,IAliPay{
@Override
public void work() {
System.out.println("工厂1喷漆");
}
@Override
public void aliPay() {
System.out.println("阿里支付了");
}
@Override
public void weChatPay() {
System.out.println("微信支付了.....");
}
}
/**
* 工厂2员工子类EmployeeFactory2
*/
public class EmployeeFactory2 extends AbstractEmployee implements IAliPay {
@Override
public void work() {
System.out.println("工厂2焊接");
}
@Override
public void aliPay() {
System.out.println("工厂2 支付宝支付...........");
}
}
/**
* 工厂3员工子类EmployeeFactory3
*/
public class EmployeeFactory3 extends AbstractEmployee {
@Override
public void work() {
System.out.println("工厂3组装");
}
}
/**
* 抽象类和接口的案例测试类
*/
public class WokerTest {
public static void main(String[] args) {
/*
* 需求:长安汽车员工管理系统。
* 该项目有一个Employee员工基类,其下有3个工厂员工子类,分别为:EmployeeFactory1、
* EmployeeFactory2、EmployeeFactory3
* 1. 所有工人都有 上班打卡方法clockIn()(所有员工打卡方式相同)
* 2. 所有工人都有 下班打卡方法clockOut()(所有员工打卡方式相同)
* 3. 但是每个工厂的子类中工作的方法work()都不同(强制重写)
*
* 并且
* 4. 工厂1员工可以微信支付和支付宝支付(需要声明两个接口,每个接口分别有一个支付方法)
* 5. 工厂2员工只能支付宝支付
* 请编程设计该程序实现
*/
AbstractEmployee emp = new EmployeeFactory3();//多态,用抽象父类接收
//调用上班打卡方法
emp.clockIn();
//调用下班打卡方法
emp.clockOut();
//调用工作方法
emp.work();
//调用特有方法,需要类型判断,强制转换
if (emp instanceof EmployeeFactory1) {
//强制转换为EmployeeFactory1
EmployeeFactory1 emp1 = (EmployeeFactory1)emp;
//调用特有方法
emp1.aliPay();
emp1.weChatPay();
} else if (emp instanceof EmployeeFactory2) {
//强制转换为EmployeeFactory2
EmployeeFactory2 emp1 = (EmployeeFactory2)emp;
//调用特有方法
emp1.aliPay();
}
}
}