Father类是父类,Son类是子类那个... Father person =  new Son();
Son person = new Son();这两句有什么差别么?

解决方案 »

  1.   

    当然有区别了,前一个声明为 父类 类型,后一个为子类类型。在调用方法的时候会有区别。声明为父类类型,如果子类重写父类非静态方法,那么调用的时候会调用子类中重写的方法;
                    如果是静态方法,或者没有重写的,那么调用的是父类中的方法;
                    但是如果不强制类型转换的话,不能直接调用子类中特有的方法;声明为子类类型,调用的是子类中的方法 和 父类中没有被重写的非private的方法;
                    但是如果不强制类型转换成父类类型的话,没有办法调用被重写的父类中的静态方法
      

  2.   

    简单点,这就是多态
    所有Father适用的地方,Son都能适用
    Father person =  new Son(); //Father型的Son()实例对象,Son中扩展方法不能被调用,Son中重写Father的方法,以Son中的为准
    Son person = new Son();//正常