Java多态应用——多态参数

多态参数

案例:定义一个员工类Employee,包含名字和月工资(private),以及计算年工资getAnnual的方法。普通员工和经理继承员工类,经理多了奖金bonus的属性和管理manage方法,普通员工多了work方法,普通员工和经理要求重写getAnnual方法。

在测试类添加showEmpAnnal(Employee  e),实现获取任何员工对象的年工资,并在main方法中调用该方法[getAnnual()]。

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

员工类Employee

public class Employee {
	
	private String name;//名字
	private double monthlyPay;//月工资
	
	public Employee(String name, double monthlyPay){
		
		this.name = name;
		this.monthlyPay = monthlyPay;
	}
	
	
	public String setName(String name) {
		return name;
	}
	public String getName() {
		return name;
	}
	
	public double setMonthlyPay(double monthlyPay) {
		return monthlyPay;
	}
	public double getMonthlyPay() {
		return monthlyPay;
	}
	
	
	public double getAnnual() {
		return monthlyPay*12;
	}

}

Worker类

public class Worker extends Employee{
	
	public Worker(String name, double monthlyPay) {
		super(name,monthlyPay);
	}
	
	
	public void work() {
		System.out.println("worker类的work方法...");
	}
	
	//重写getAnnual方法
	
	public double getAnnual() {
		return super.getAnnual();
	}

}

Manage类

public class Manager extends Employee{
	
	private double bonus;
	
	public Manager(String name,double monthlyPay,double bonus) {
		super(name,monthlyPay);
		this.bonus = bonus;
	}
	
	public double setBonus(double bonus) {
		return bonus;
	}
	public double getBonus() {
		return bonus;
	}
	
	public void manage() {
		System.out.println("manager类的manage的方法...");
	}
	
	//重写getAnnual方法
	public double getAnnual() {
		return super.getAnnual()+bonus;
	}

}

Test类

public class Test {

	public static void main(String[] args) {
		Worker jeak = new Worker("jeak",10000);
		Manager tom = new Manager("tom",20000,25000);
		
		Test test = new Test();
		test.showEmpAnnual(jeak);
		test.showEmpAnnual(tom);
		
		test.testWork(jeak);
		test.testWork(tom);

	}

    //在测试类添加showEmpAnnal(Employee  e),实现获取任何员工对象的年工资,
    //并在main方法中调用该方法[getAnnual()]。

	public void showEmpAnnual(Employee e) {

		System.out.println(e.getAnnual());
	}


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

	public void testWork(Employee e) {
		if(e instanceof Worker) {
            //向下转型
			((Worker) e).work();
		}else if(e instanceof Manager) {
			((Manager) e).manage();
		}else {
			
		}
	}
}
120000.0
265000.0
worker类的work方法...
manager类的manage的方法...

如有错误,还望指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值