多态的应用 ——多态参数
面向对象编程。多态
多态的应用
2)多态参数
方法定义的形参类型为父类类型,实参类型允许为子类类型
应用实例1:前面的主人喂动物
应用实例2:
1.定义员工类Employee,包含姓名和月工资[private],以及计算年工资getAnnual的方法。普通员工和经理继承了员工,经理类多了奖金bonus属性和管理manage方·
法,普通员工类多了work方法,普通员工和经理类要求分别重写getAnnual方法
2.测试类中添加一个方法showEmpAnnal(Employee e),实现获取任何员工对象的年工资,
3.并在main方法中调用该方法[e.getAnnual()]测试类中添加一个方法,testWork,如果是普通员工,则调用work方法,如果是经理,则调用manage方法
1 package com.PolyParameter;
2
3 /**
4 * 应用实例2:
5 * 1.定义员工类Employee,包含姓名和月工资[private],以及计算年工资getAnnual的方法。
6 * 普通员工和经理继承了员工,经理类多了奖金bonus属性和管理manage方法,普通员工类多了work方法;
7 * 普通员工和经理类要求分别重写getAnnual方法
8 * 2.测试类中添加一个方法showAnnal(Employee e),实现获取任何员工对象的年工资,
9 * 3.并在main方法中调用该方法[e.getAnnual()]测试类中添加一个方法,testWork,
10 * 如果是普通员工,则调用work方法,如果是经理,则调用manage方法
11 */
12 /*
13 实例分析:
14 1.先创建一个父类Employee,赋予姓名、工资等属性,并添加相应的构造器,set和get
15 最后创建一个getAnnual的方法
16 创建子类员工worker和经理Manager,给员工添加work方法,给经理添加奖金bonus和manage管理方法
17 同时给员工和经理添加父类的getAnnual方法
18 2.新建一个testWork类,在测试类中添加一个showAnnal,由于员工和经理都有相应的年工资
19 所以给showAnnal的形参赋予Employee类并定义为e,可以去调用相应的方法
20 3.判断条件+向下转型
21 */
22 public class Test {
23 public static void main(String[] args) {
//给子类赋予相应的属性
24 worker worker = new worker("tom", 3500, 13);
25 Manager manager = new Manager("smith", 23000, 14, 31000);
26 //给测试类创建对象
27 Test test = new Test();
28 //调用方法
29 test.showAnnual(worker);
30 test.showAnnual(manager);
31 test.testWork(manager);
32 test.testWork(worker);
33 }
34
35 //测试类中添加一个方法showAnnual(Employee e),实现获取任何员工对象的年工资,
36 public void showAnnual(Employee e) {
37 System.out.println(e.getAnnual());
38 }
39
40 //并在main方法中调用该方法[e.getAnnual()]测试类中添加一个方法,testWork;
41 // 如果是普通员工,则调用work方法,如果是经理,则调用manage方法.
42 //给形参赋予员工类
43 public void testWork(Employee e) {
44 //判断条件+向下转型
45 //判断e属于worker还是manager,再进行向下转型
46 if (e instanceof worker) {
47 ((worker) e).work();//向下转型
48 //向下转型的另一种方法
49 // worker work = (worker) e;
50 // work.work();
51 } else if (e instanceof Manager) {
52 ((Manager) e).manage();//向下转型
53 //向下转型的另一种方法
54 // Manager man=(Manager) e;
55 // man.manage();
56 }else {
57 System.out.println();
58 }
59 }
60 }
想多了都是问题,做多了才是答案

浙公网安备 33010602011771号