java强制引用,Java引用类型的强制类型转换

强制类型转换,分为基本数据类型和引用数据类型两种情况,这里探讨后者,即引用类型的强制类型转换。

对于引用类型来说,什么是强制类型转换呢?简单地说,就是把父类型转换为子类型。因为子类型比父类型的内涵要丰富,无非就是属性更多功能更强,所以要把父类型转换为子类型,需要强制,所以叫强制类型转换。那么,是不是只要是父类型的变量就可以转换为子类型呢?事实上不是,这里是有条件限制的。

首先来看发生在什么情况下。

举个例子来说,比如原来定义了两个类型,FatherClass和SonClass,然后构造了一个SonClass类型的对象,用一个FatherClass类型的变量father引用了,就像这样:

FatherClass father = new SonClass(); //自动发生的向上类型转换

那么,需要将这个对象的类型还原的时候,就可以用这个表达式。

SonClass son = (SonClass)father; //向下强制类型转换

其实,father仍然是FatherClass类型,只不过是做了向下强制类型转换。

我们刚才说从父类到子类的强制类型转换并不总是能够成功,那什么时候不能成功呢?

在于这个的对象的真实类型,也就是它是使用什么类的构造方法构造出来的。如果它本身就是父类的类型,那么强制类型转换是不会成功的。

还是举个例子:

FatherClass f = new FatherClass();

SonClass s = (SonClass)f; //这时候就会报错,运行时报错,编译能通过的

编译器只检查类型之间有无继承关系,有则通过;运行时检查真正类型,是则通过。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值