类、超类和子类(二)
一个对象变量可以指示多种实际类型的现象称为多态( ploymorphism),在运行时能够自动地选择调用哪个方法的现象称为动态绑定
为了说明这一点,我举例如下:
1、
package one;
public class Employee {
private int salary = 5000;
public int getSalary() {
return salary;
}
}//先建立 Employee 类
2、
package one;
public class Manager extends Employee {
@Override
public int getSalary() {
return (super.getSalary() + 5000);
}
}//接着建立继承自 Employee 类的 Manager 类
3、
package one;
public class GetSalary {
public static void main(String[] args) {
Employee[] staff = new Employee[2];
staff[0] = new Manager();
staff[1] = new Employee();
for (Employee i : staff) {
System.out.println(i.getSalary());
}
}
}//最后建立证明多态的 GetSalary 类
4、
输出结果:
10000
5000
5、结论: i.getSalary() 调用能够明确调用哪一个 getSalary() 方法,可以看出,虽然 i 是一个 Employee 类型,但 i 既可以引用 Employee 类型的对象,又可以引用 Manager 类型的对象。虚拟机知道 i 实际只想的对象类型,能够正确调用相对应的方法。