Java中对象转型

理解:

Java中对象转型_第1张图片

有一个对象 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的子类

你可能感兴趣的:(Java,java,jvm,开发语言)