码迷,mamicode.com
首页 > 其他好文 > 详细

对象转型

时间:2020-02-29 14:41:31      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:str   view   没有   answer   因此   mamicode   向下转型   div   only   

1、子类转父类(向上转型)

所谓的转型,是指当引用类型和对象类型不一致的时候,才需要进行类型转换类型转换有时候会成功,有时候会失败。

例:子类ADHero extends 父类Hero

package charactor;
public class Hero {
 public String name;
 protected float hp;
 
 public static void main(String[] args) {
  
  Hero h = new Hero();
  
  ADHero ad = new ADHero();
  
  //类型转换指的是把一个引用所指向的对象的类型,转换为另一个引用的类型
  
  //把ad引用所指向的对象的类型是ADHero
  //h引用的类型是Hero
  //把ADHero当做Hero使用,一定可以
  
  h = ad;   //此时h引用所指向的对象是ADHero
 }
}
2、父类转子类(向下转型)
父类转子类,有的时候行,有的时候不行,所以必须进行强制转换。强制转换的意思就是 转换有风险,风险自担。
什么时候行呢?
1.        Hero h =new Hero();
2.        ADHero ad = new ADHero();
3.        h = ad;
4.        ad = (ADHero) h;
第3行,是子类转父类,一定可以的。
第4行,就是父类转子类,所以要进行强转。
h这个引用,所指向的对象是ADHero, 所以第4行,就会把ADHero转换为ADHero,就能转换成功。
什么时候转换不行呢?
1.        Hero h =new Hero();
2.        ADHero ad = new ADHero();
3.        Support s =new Support();      //Support类 继承 Hero类
4.        h = s;
5.        ad = (ADHero)h;
第4行,是子类转父类,是可以转换成功的。
第5行,是把h引用所指向的对象 Support,转换为ad引用的类型ADHero。 从语义上讲,把物理攻击英雄,当成辅助英雄来用,说不通,所以会强制转换失败,并且抛出异常
以下是对完整的代码的关键行分析
14行: 把ad当做Hero使用,一定可以
转换之后,h引用指向一个ad对象
15行: h引用有可能指向一个ad对象,也有可能指向一个support对象
所以把h引用转换成AD类型的时候,就有可能成功,有可能失败
因此要进行强制转换,换句话说转换后果自负
到底能不能转换成功,要看引用h到底指向的是哪种对象
在这个例子里,h指向的是一个ad对象,所以转换成ADHero类型,是可以的
16行:把一个support对象当做Hero使用,一定可以
转换之后,h引用指向一个support对象
17行:这个时候,h指向的是一个support对象,所以转换成ADHero类型,会失败。
失败的表现形式是抛出异常 ClassCastException 类型转换异常
技术图片技术图片
 

3、没有继承关系的两个类,互相转换

没有继承关系的两个类,互相转换,一定会失败
虽然ADHero和APHero都继承了Hero,但是彼此没有互相继承关系
"把魔法英雄当做物理英雄来用",在语义上也是说不通的
技术图片
package charactor;
public class Hero {
 public String name;
 protected float hp;
 public static void main(String[] args) {
  ADHero ad = new ADHero();
  APHero ap = new APHero();
  // 没有继承关系的类型进行互相转换一定会失败,所以会出现编译错误
  ad = (ADHero) ap;
 }
}
 
 
 
 
 

对象转型

标签:str   view   没有   answer   因此   mamicode   向下转型   div   only   

原文地址:https://www.cnblogs.com/yao-299/p/12382743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!