有一个超类Employee,一个子类Manager,Manager多了一个设置奖金的方法。
Employee a;
a=new Employee (...);
a=new Manager(...);
a.setBonus(20000);上面的代码编译错误。
我改成下面的形式:
Manager a=new Manager(...);
a.setBonus(20000);这才能通过。这是怎么解释啊?

解决方案 »

  1.   

    a是Employee 类型的引用,不具备setBonus方法
      

  2.   

    a虽然是一个Manager的引用,但它是被定义为Employee的,所以他没有Manager新的方法,你可以试试向下转型,
    ((Manager)a).setBonus(2000);
      

  3.   

    按照楼主的这种逻辑,开发程序就很简单了,以后什么类都用Object类去指一下,绝对万事大吉。
      

  4.   

    楼主的代码应该可以
    父类引用可以指向子类实例,调用方法的时候先到子类中找,如子类没有去父类去找
    给你个代码,自己去试试
    class A{ 
       void test(){System.out.print("fff");} 
    }  public class sss extends A{ 
         //把子类的 test()方法换个名字的话,就会调用 父类的test()
         void test(){
         System.out.print("gggg");
        } 
        public static void main(String[] args){ 
         A aa=new sss();
         aa.test();
       }  } 
      

  5.   

    代码应该改为:
    Employee a = new Manager(); 
    a.setBonus(20000); 
    这样也可以.
      

  6.   

    你仔细想想~~~~一个经理可以是一个雇员:Manager a=new Employee();  //ok
    但是一个雇员不可能一定是经理:Employee a=new Manager();   //worry父类不能调用子类特有的方法。(ls。说的)去看看《java 核心技术I》,里面专门有一节讲这个
      

  7.   

    class Employee {
    public void setBonus(float bonus) {
    System.out.println("Employee setBonus");
    }
    }class Manager extends Employee {
    private float bonus;
    public void setBonus(float bonus) {
    this.bonus=bonus;
    System.out.println("Manager setBonus");
    }
    }public class TestSuper {
    public static void main(String[] args) {
    Employee e=new Manager();
    e.setBonus(1000.00f);
    }
    }