Java 多态参数

定义员工类Employee,包含姓名和月工资[private],以及计算年工资getAnnual的方法。

普通员工和经理继承了员工,经理类多了奖金bonus属性和管理manage方法,普通员工类多了work方法,普通员工和经理类要求分别重写getAnnual方法。
测试类中添加一个方法showEmpAnnal(Employee e),实现获取任何员工对象的年工资并在main方法中调用该方法[e.getAnnual()

public class Test {
    public static void main(String[] args){
        Employee e = new Manager("tom", 20000, 50000);//向上转型
        Worker dd = new Worker("dd", 30000);//向上转型
        Test test = new Test();
        test.showAnnal(e);
        test.showAnnal(dd);
        test.testWork(e);
    }
    public void showAnnal(Employee ee){//多态参数 Emploee类 可接收本类对象或其子类
        System.out.println("年工资为:" + ee.getAnnual());
    }
    public void testWork(Employee ee){
        if(ee instanceof Manager){//ee的运行类型为Manager或其子类
            ((Manager)ee).manage();//向下转型
        }else if(ee instanceof Worker){//ee的运行类型为Worker或其子类
            ((Worker)ee).work();//向下转型
        }
    }
}

public class Employee {//父类
    private String name;
    private double sal;
    public Employee(String name, double sal){
        this.name = name;
        this.sal = sal;
    }

    public String getName() {
        return name;
    }

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

    public double getSal() {
        return sal;
    }

    public void setSal(double sal) {
        this.sal = sal;
    }

    public double getAnnual(){
        return sal * 12;
    }
}

public class Manager extends Employee{
    private double bonus;
    public Manager(String name, double sal, double bonus){
        super(name, sal);
        this.bonus = bonus;
    }
    public void manage(){//特有方法
        System.out.println("经理" + getName() + "is working");
    }
    public double getAnnual(){//重写getAnnual()
        return super.getAnnual() + bonus;
    }
}

public class Worker extends Employee{
    public Worker(String name, double sal){
        super(name, sal);
    }
    public void work(){//特有方法
        System.out.println("工人" + getName() + "is working");
    }
    public double getAnnual(){//重写getAnnual()
        return super.getAnnual();
    }
}

]
如果是经测试类中添加一个方法,testWork,如果是普通员工则调用work方法理,则调用manage方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值