多态参数
案例:定义一个员工类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的方法...
如有错误,还望指正。