1. 明确引用类型与对象类型的概念
例如:ADHero ad = new ADHero();
其中ad为引用,引用类型时ADHero,new ADHero()则是一个对象,对象类型是ADHero。接下来要讨论的类型转换的问题,指的是引用类型和对象类型不一致的情况下的转换问题。
2. 子类转父类(向上转型)
所有的子类转换为父类都可行
3. 父类转子类(向下转型)
父类转子类,有的时候行,有的时候不行,所以必须进行强制转换。
强制转换的意思就是 转换有风险,风险自担。
3.1 什么时候行
当父类引用所指的对象是子类或子类的子类类型时则可以
例如: ADHero extends Hero
1. Hero h =new Hero();
2. ADHero ad = new ADHero();
3. h = ad;
4. ad = (ADHero) h;
其中经过第3行后,h引用所指向的对象的类型是ADHero类型,所以h强转为ADHero类型是可行的。
3.2 什么时候不行
除了上述行的条件其余都不行
4. 没有继承关系的两个类,互相转换
没有继承关系的两个类,互相转换,一定会失败
5. 实现类转换成接口(向上转型)
实现类转换成接口一定可行
6. 接口转换成实现类(向下转型)
与3情况相同,若“=”右边引用所指向的接口是“=”左边引用接口类型的实现类则可以,否则不行。