厨娘的Java笔记(一):强制类型转换之引用转换

强制类型转换分为数据类型转换和引用类型转换,这里只讲后者。以一个具体事例为例。

下面是乐器类及它的子类的继承关系图:

                                                                                                

 


Instrument instrument=new Violin();

//子类的父类引用,用父类引用的方式建立子类对象实例。

由于继承性,子类可以自动转换为父类。虽然Violin对象实例被向上转型为Instrument了,但是这个Violin对象实例在内存中的本质还是Violin类型的。

Violin v=(Violin)instrument;

//将instrument强制转换为Violin类型.

由于instrument对象是用子类的父类引用方式建立的,这个对象实例的Violin类型被临时削弱了。所以需要进行强制转换才能变成Violin类型。

 Brass b=(Brass)instrument;

//将instrument强制转换为Brass类型

运行报错:

Exception in thread "main" java.lang.ClassCastException: Violin cannot becast to Brass

  at Music.main(Music.java:18)

为什么会报错呢?由于instrument的本质是Violin类型,Brass既不是Violin的子类不是它的父类,所以无法进行强制转换。

总结:

1、         向上强制转换是被允许的。

2、         向下强制转换的类必须是目前引用类型某个子类,并在编译时检查。

3、         如果运行时错误会发生,运行时会检查对象类型。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值