Java中对象转型

理解:

有一个对象 new ADHero(), 同时也有一个引用ad
对象是有类型的, 是ADHero
引用也是有类型的,是ADHero 

一般来说引用类型和对象类型是一样的,当引用类型和对象类型不一致就要考虑类型转换

简单判断:把右边的当做左边来用,看说得通不

向上转型

将子类转换为父类,因为子类包含于父类,所以说得通

类转换成接口

向下转型

慎重判断,如果没有继承关系一定会失败

接口也有可能失败,主要其实看接口的继承关系

package charactor;
    
public class Hero {
    public String name; 
    protected float hp;
        
    public static void main(String[] args) {
        ADHero ad = new ADHero();
           
        AD adi = ad;
  
        ADHero adHero = (ADHero) adi;
           
        ADAPHero adapHero = (ADAPHero) adi;
        adapHero.magicAttack();
    }
        
}

10行: ad引用指向ADHero, 而adi引用是接口类型:AD,实现类转换为接口,是向上转型,所以无需强制转换,并且一定能成功
12行: adi实际上是指向一个ADHero的,所以能够转换成功
14行: adi引用所指向的对象是一个ADHero,要转换为ADAPHero就会失败。

假设能够转换成功,那么就可以使用magicAttack方法,而adi引用所指向的对象ADHero是没有magicAttack方法的 

 instanceof

instanceof Hero 判断一个引用所指向的对象,是否是Hero类型,或者Hero的子类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值