强制类型转换(父类转子类)

一、数据类型分类:主要分为 基本类型、引用类型两大类;
在这里插入图片描述

二、基本类型 转换原则
1、类型转换主要在在 赋值、方法调用、算术运算 三种情况下发生。

a、赋值和方法调用 转换规则:从低位类型到高位类型自动转换;从高位类型到低位类型需要强制类型转换:

(1)布尔型和其它基本数据类型之间不能相互转换;

(2)byte型可以转换为short、int、、long、float和double;

(3)short可转换为int、long、float和double;

(4)char可转换为int、long、float和double;

(5)int可转换为long、float和double;

(6)long可转换为float和double;

(7)float可转换为double;

另外还有是直接数的赋值:先通过直接数判断其类型,然后基本原则和上面谈到的赋值原则基本一致;只是直接数是整数时特殊一点,当在可表示范围内时,可以直接赋值给 byte short char三种类型;
在这里插入图片描述

b、算术运算 中的类型转换:1 基本就是先转换为高位数据类型,再参加运算,结果也是最高位的数据类型;2 byte short char运算会转换为Int;

(1)如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。

(2)如两操作数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。

(3)如两操作数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。

(4)如两操作数均不为double、float或long,则两操作数先被转换为int,再参与运算。

特殊:

(1)如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。

(2) 当运算符为自动递增运算符(++)或自动递减运算符(–)时,如果操作数为byte,short或char类型不发生改变;

三、引用类型 转换原则

1、基本类型 与 对应包装类 可自动转换,这是自动装箱和折箱的原理;
在这里插入图片描述

2、两个引用类型间转换:

1、子类能直接转换为父类 或 接口类型;

2、父类转换为子类要 强制类型转换;且在运行时若实际不是对应的对象,会抛出ClassCastException运行时异常;

作者:蒲熠星F1
链接:https://www.jianshu.com/p/0867a5f6ea04
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

示例一
父类强制转子类

Father f = new Father();
Son s = (Son)f;//出错 ClassCastException

分析:
创建一个父类的实例,想要强制把父类对象转换成子类的,不行!
通俗的想,父亲永远不可能转换成儿子。因为有空白,假如转换了,那么上幼儿园、哺乳,这些儿子的特有属性父亲是没有的,强转就出现了ClassCastException

示例二
“假的”父类强制转子类

Father f = new Son();
Son s = (Son)f;//可以

分析:
父类对象引用着一个子类实例。
Son类特有的属性暂时不能通过 f 来操作,因为Father类没有Son类(子类)的特有属性。
接着创建子类对象 s,它引用的是父类对象 f 强制转换来的对象(其实就是个装爹的Son,把他强制转回了Son),这时就可以通过 s 来操作子类的特有属性了。

通俗的说就是儿子装爹,终究是儿子,本质没变,还是可以把他强制转回儿子的。

示例三
子类强制转父类

Son s = new Son();
Father f = (Father)s;//可以

分析:
子类转换成父类,只是子类对象的特有属性无法利用 f 操作,f 可以操作其非特有的属性(由父类继承而来的属性)。也就是说,儿子可以执行吃饭和睡觉的方法,父亲也有,因为这就是从父亲继承的,但是让父亲执行上小学的方法就不行,因为这是儿子的‘‘特有属性’’。

通俗的说,儿子和爹的共同点——“都是人”,儿子作为人的基本属性是从父亲继承过来的,儿子转换成了父亲,只是失去了原本自己比父亲多出来的那些特有属性。
————————————————
版权声明:本文为CSDN博主「#Undefined」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014418267/article/details/103545074

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值