请列位看官说明一下,这两种声明到底啥区别
Manager a= new Man()
Man a=new Man()

解决方案 »

  1.   

    Manager是Man的父类吧?
    第一个是父类引用指向子类实例化对象
    第二个是子类引用指向子类实例化对象这个是实现多态要素之一,多态后就可以写出一段所有子类都通用的代码,当添加新的子类时,这段代码是不需要修改的。
    以下是个人见解:
    比如父类Manager;子类Man、Woman
    你可以写这样一个函数:
    void method(Manager m);
    然后
    Manager a=new Man();
    method(a);
    Manager b=new Woman();
    method(b);
    这样调用method就可以了。但是如果用Man a=new Man();
    岂不是要重载一个method?
    如果有好多子类,难道要对每个子类重载一个method?
      

  2.   

    Manager a= new Man()
    >>> 可以强转成Man的实例,如果不转,仅可以调用Manager的方法和属性Man a=new Man() 
    >>> 可以调用Manager和Man的所有方法和属性
      

  3.   

    对,Manager是Man的父类,a 的类型是Manager,所以只能调用父类的属性,方法,而Man a=new Man();
    a的类型是Man,Man继承Manager,可以调用自身所有方法和属性,以及其父类的非私有属性和方法
      

  4.   


    既然是子类了,那么父类的method方法不是就都继承了么,为什么还要重载
      

  5.   

    我没说method是Manager的方法啊。。只是这个method的一个参数类型是Manager的
      

  6.   


    Manager a= new Man()
    相当于:
    Man man = new Man();
    Manager a = (Manager)man;// 转换一下
      

  7.   

    Man 和Manager 都是类名,你这两个实质上都是在创建对象。只是类名不同罢了
      

  8.   

    这个叫做多态,
    Manager a= new Man()
    a的编译时类型是Manager,运行时类型是Man
    Manager如果是借口,那么实现这个接口的类,可能不止是Man一个,可能是woman,那么在实现接口的同一个方法的时候结果就可能不一样。
    Man a=new Man()就是最普通的一个类new出一个对象了。
    这样讲还是不懂的话,自己看书去吧………………