子类转换成父类时(向上转型)的规则:
- 将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换。
- 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
- 此时通过父类引用变量无法调用子类特有的方法。
父类到子类的转换(向下转型):
前面已经提到,当向上转型发生后,将无法调用子类特有的方法。但是当需要调用子类特有的方法时,可以通过将父类再转换为子类来实现。
将一个指向子类对象的父类引用赋值给一个子类的引用,称为向下转型,此时必须进行强制类型转换。
基本数据类型之间进行强制类型转换是对被强制转换类型“做手术”。例如:
double d1=5; //对5做手术,变成5.0
int a=(int)3.14;//对3.14"做手术,变成3
引用数据类型之间强制转换时是还原子类的真实面目,而不是给子类“做手术”。例如:
Pet pet=new Dog("欧欧,"雪纳瑞")//Pet是Dog和Penguin的父类
Dog dog=(Dog)pet;//正确!还原子类的真实面目
Penguin pgn=(Penguin)pet;//出现异常!给子类做手术