在生物学中,多态性是指生物体或物种可以具有许多不同形式或阶段的能力。在面向对象编程中。编程也有同样的概念,一个对象可以以多种形式存在。
假设你有这个 Employee 类。
public class Employee{
public int computeSalary(){
//How would you compute the salary of an average employee
}
}
接下来是一个名为 BasePlusComission Employee 的子类
public class BasePlusCommissionEmployee extends Employee{
public int computeSalary(){
//Commision employee salary computation + Base Employee salary computation
}
}
你有这个 CommissionEmployee
public class CommissionEmployee extends Employee{
public int computeSalary(){
//Commision employee salary computation
}
}
现在,我们要多态地处理这个雇员的计算。我们可以做
public void computeEmployeeSalary(Employee emp){
emp.computeSalary();
}
此方法将接收任何类型的 Employee 对象(这意味着我们可以传递 Employee 对象的子类)。一旦你传递了它,它将计算传递的员工(参数),并且它的 computeSalary() 将被调用,
即使您传递了 BasePlusCommission Employee 或 CommissionEmployee,由于 Dynamic 方法查找,它仍会根据其实现计算其薪水。
另一个更清晰的解释。您可以创建一组或一组员工。
Employee[] employees = { new BasePlusComissionEmployee(), new CommissionEmployee,new Employee()};
并且您希望这些对象计算他们的薪水。你可以像这样多态地处理它们的计算
for(int i = 0; i < employees.length;i++){
employees[i].computeSalary();
}
请注意,尽管数组声明是 Employee,但它们的 computeSalary() 实现将根据员工数组的每个对象的 computeSalary(); 的每个类实现而有所不同