多态参数
方法定义的形参类型为父类类型,实参类型允许为子类类型
package poly.parameter;
public class Employee {
private String name;
private int salary;
public Employee() {
}
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public int annualSalary(){
return salary * 12;
}
}
package poly.parameter;
public class Manager extends Employee{
private int bonus;
public Manager() {
}
public Manager(String name, int salary, int bonus) {
super(name, salary);
this.bonus = bonus;
}
public int getBonus() {
return bonus;
}
public void setBonus(int bonus) {
this.bonus = bonus;
}
public void manage(){
System.out.println("Manager " + getName() + " is managing...");
}
@Override
public int annualSalary() {
return super.annualSalary() + bonus;
}
}
package poly.parameter;
public class Worker extends Employee{
public Worker() {
}
public Worker(String name, int salary) {
super(name, salary);
}
public void work(){
System.out.println("worker " + getName() + " is working...");
}
@Override
public int annualSalary() {
return super.annualSalary();
}
}
package poly.parameter;
public class Test {
public void showEmpAnnual(Employee e){
System.out.println(e.annualSalary());
}
public void testWork(Employee e){
if (e instanceof Worker)
((Worker) e).work();
else if (e instanceof Manager)
((Manager) e).manage();
}
public static void main(String[] args) {
Employee m = new Manager("manager",20000,200000);
Employee w = new Worker("worker",2000);
new Test().showEmpAnnual(m);
new Test().showEmpAnnual(w);
new Test().testWork(m);
new Test().testWork(w);
}
}
结果
440000
24000
Manager manager is managing…
worker worker is working…