新建一个对象时,有声明类型和实际类型之分,如Person p = new Male(); Person为声明类型,Male为实际类型,如果使用p去调用方法已经被重写,那么p调用该方法时,调用的是Male里的被重写的方法。
一定可以将子类的实例转换为父类的实例,因为子类的实例一定是他父类的实例,称为向上转换。
Person p = new Male();是可以的,新建了一个子类person的对象,类型声明为父类的,Male m = new Person(); 则不可以,父类的实例未必是子类的实例,声明对象不能是子类。