1、if(emp instanceof Programmer)    判断传递给calcPayroll(Employee emp)的参数是不是Programmer类型的实例变量。2、money+=((Programmer)emp).bonus();等同于money = money+((Programmer)emp).bonus();   执行后的money的值是15000。3、System.out.println("Payroll for progrer is"+pr.alcPayroll(prg));   调用pr.alcPayroll(prg),把Programmer类的实例变量传递给alcPayroll()方法。4、System.out.println("payroll for Manager is"+pr.calcPayroll(mgr));   调用pr.alcPayroll(mgr),把Manager类的实例变量传递给alcPayroll()方法。所以if(emp instanceof Programmer)会返回false,得到的money值是4000。

解决方案 »

  1.   

    if(emp instanceof Programmer)//1
    money+=((Programmer)emp).bonus();//2
    如果employee是programmer,salary的基础上加上bonus。
    System.out.println("Payroll for progrer is"+pr.alcPayroll(prg));//3
    System.out.println("payroll for Manager is"+pr.calcPayroll(mgr));//4
    都调用了基类的calcPayroll,但传的参数不一样,一个是programmer,另外就是manager.
    得到的结果便是
    Payroll for progrer is15000
    payroll for Manager is4000顺便提醒一下,里面很多变量大小写不一致。