1、可以用子类的引用给父类的引用赋值,也就是说,父类的引用可以指向子类的对象。相当于父类的引用也指向子类的对象。
2、不能让子类的引用指向父类的对象。因为父类并没有子类的属性和方法。
3、因为子类继承了父类的方法和属性。所以父类的对象能做到的,子类对象肯定能做到。换句话说,可以在子类对象上,指向父类的方法,当父类的引用指向子类的实例,只能通过父类的引用,像父类一样操作子类对象。也就说名的类型,决定了执行哪些操作。
举例来讲。如果引用ph 和 m都指向一个对象,但是引用ph和m却不属于同一个类型。如果ph的类型中定义了getBrand方法,那么就可以调用ph.getBrand();但是m的类型中没有定义getBr and方法,那就不能调用m.getBrand()方法。
4、是否可以强制转换,取决于等号右边的引用指向的对象 是否是等号左边的类型或者其子类对象,如果是那么可以强制类型转化为该类型。否则就不可以。
虽然父类的引用可以指向不同类型的对象,调用方法时,实际执行的方法取决于对象的类型,而非引用的类型。也就是说,能调用那些方法,是引用决定的,具体执行哪个类的方法,是引用指向的对象决定的。这就是覆盖的精髓。覆盖是多态的一种,也是最重要的一种。