java不能对什么类型进行转换_Java为什么类型转换只能向上不能向下?

类型不是随意转换的。

回答这个问题首先需要了解继承,一个类(class A)继承另一个类(class B),即:

public class A {

}

class B extends A {

}

那么,此时B对象会拥有A的对象的所有public,protect字段和方法,再此基础上,B可以增加自己独有的方法和字段,或者重写继承自A的方法,因此,B对象可以向上转换为A类型的对象,因为B拓展了A,A可以的B都可以。

但是A的对象是不可以向下转换为B的,因为A没有B独有的那部分方法或者字段,但是这样也不绝对,如果这个对象本来就是B的对象,由于某些原因需要他作为A的对象使用,把他转换成A的对象了,在这种情况下,再把它变回来是没有问题的。

那么怎么知道这个对象是不是B的对象?使用关键字instanceOf。

if(obj instanceof B){

// 此时obj是B的对象,可以向下转换。B objA = (B)obj;

}

那么什么时候会需要这样做呢?

比如还有很多类继承了A,你要根据某个标准决定创建的是具体那个类的对象,但是无论你创建的是啥,返回的类型就一种,A类型,那么你在使用这种对象的时候就可以instanceof判断创建的是谁,然后向下转换。

当然,还有另一种转换,具体类转接口类,例如:

List list = new ArrayList<>();

可以这样做的原因是类实现了接口。

接口决定了类可以做什么,会有哪些方法,类在实现接口的时候必须完成这些方法(除了抽象类),因此接口描述的特性类的对象将会全部拥有,所以可以这样转换。

再具体,这里不再展开,自行百度类的继承相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值