Manager类继承自Employee类。
创建子类Manager类的实例对象boss:
Manager boss = new Manager("Carl Cracker", 80000,1987, 12 , 15) ;
boss.setBonus(5000) ;
下面定义一个包含 3 个雇员的数组,将经理和雇员都放到数组中:
Employee[] staff = new Employee[3];
staff [0] = boss;
staff [1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff [2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
// 输出每个人的薪水:
for (Employee e : staff){
System.out.println(e.getName() + " " + e.getSalary());
}
运行这条循环语句将会输出下列数据:
Carl Cracker 85000.0
Harry Hacker 50000.0
Tommy Tester 40000.0
这里的 staff[1] 和 staff[2] 仅输出了基本薪水,这是因为它们对应的是Employee 对象,而 staff[0] 对应的是 Manager 对象, 它的 getSalary 方法将奖金与基本薪水加在了一起。需要提到的是,e.getSalary()调用能够确定应该执行哪个 getSalary 方法。请注意, 尽管这里将 e 声明为 Employee 类型,但实际上 e 既可以引用 Employee 类型的对象,也可以引用 Manager 类型的对象。
当 e 引用 Employee 对象时,e.getSalary() 调用的是 Employee 类中的 getSalary 方法;当e 引用 Manager 对象时,e.getSalary( ) 调用的是 Manager 类中的 getSalary 方法。虚拟机知道e 实际引用的对象类型,因此能够正确地调用相应的方法。
一个对象变量(例如, 变量 e ) 可以指示多种实际类型的现象被称为多态( polymorphism)。在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding。)
网友评论