java转型小结

百度看到的,觉得总结的很全面,记录一下

原文地址:https://baijiahao.baidu.com/s?id=1617076999224722021&wfr=spider&for=pc

基本数据类型的转换暂不讨论

1.在引用数据类型中,只有有继承关系的类型才能进行类型转换;

也就是在一条继承链上的

2.类型转换只是转换看待对象的引用的类型,对象本身没有也不可能参与转换;

引用的指向,引用具体代表哪一个类型    对象还是那个对象

3.父类引用可以自动指向子类对象,但只能访问和调用到来自于父类的属性和行为;

就是父子类共有的部分

4.子类的引用不能指向父类或其它子类对象,就算强转也会导致运行失败并抛出ClassCastException;

编译可以通过,运行时会报错。换句话说就是父类或其他子类对象无法强制转换为当前子类对象。

例如:父类是宠物类Pets 子类Dog和Cat都继承宠物类

我们无法将宠物类型或猫类型强制转为狗类型

    Pets p=new Pets();
    Dog d=(Dog)p;

运行时会报错

Cat c=new Cat();
    Dog d=(Dog)c;

编译期报错

 

Pets p=new Dog();//子类引用自动赋给父类引用,没有问题。属于向上转型,不过会丢失部分信息,此时只能调用宠物类和狗类都有的属性和方法
    Dog d=(Dog)p;//强制类型转换,向下转型,不安全;不过如果成功,就会具有狗类的所有属性和方法信息。

不安全的原因是宠物类的引用可能指向其他子类比如猫类

Pets p=new Cat();

Dog d=(Dog)p;//编译器没有任何问题;运行时进行类型信息绑定得知p指向猫类会报运行时异常

为了防止这种情况,可以在强制转型时进行类型检查

if(p instanceof Dog){

     Dog d=(Dog)p;

}

5.把父类引用赋给子类引用,语法上必须使用强制类型转换,要想运行也成功还必须保证父类引用指向的对象一定是该子类对象(最好使用instanceof判断后,再强转)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值