java小白——关于多态对象类型转换1

  1. 这里所说的类型转换,是指的是存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制对象类型转换时,java运行时会java.lang.ClassCastEzception异常。
  2. 在继承链中,我们将子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”。
  3. 不能直接将父类的对象强制转换为子类类型,只能将向上转型后的子类对象再次转换为子类类型。也就是说,子类对象必须向上转型后,才能再向下转型。请看下面的代码:
package qaq;

public class test1 {

	public static void main(String[]args){
		FatherClass fatherObj = new FatherClass();
		SonClass sonObj = new SonClass();
		
	   // SonClass sonObj1 = (SonClass)fatherObj;不能将父类对象直接替换为自类对象会抛出异常
	    fatherObj = sonObj;//先向上转型,再向下转型
	    SonClass sonObj1 = (SonClass)fatherObj;
	}
}
class FatherClass{}
class SonClass extends FatherClass{}
//将第9行的注释去掉,运行时会抛出异常,但是编译可以通过。

因为向下转型存在风险,所以在接收到父类的一个引用时,请务必使用 instanceof 运算符来判断该对象是否是你所要的子类,请看下面的代码:
 package qaq;

public class test1 {

	public static void main(String[]args){
		FatherClass fatherObj = new FatherClass();
		SonClass sonObj = new SonClass();
		if(fatherObj instanceof SonClass){  //fatherObj 是不是 SonClass 类的实例
			SonClass sonObj1 = (SonClass)fatherObj;//判断是,将fatherObj转换为子类对象
		}else{
			System.out.println("sonObj1没有先向上转型,所以不能转换");
		}
		fatherObj = sonObj;//向上转型
        if(fatherObj instanceof SonClass){//fatherObj 是不是 SonClass 类的实例
            SonClass sonObj2 = (SonClass)fatherObj;//判断是,将fatherObj转换为子类对象
        }else{
            System.out.println("不能转换");
        }

	   
	}
}
class FatherClass{}
class SonClass extends FatherClass{}

运行结果:sonObj1没有先向上转型,所以不能转换
总结:对象的类型转换在程序运行时检查,向上转型会自动进行,向下转型的对象必须是当前引用类型的子类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值