java 向上转型和向下转型

有使用我们需要把子类转换成父类,父类的引用指向子类对象,然后父类的引用再来调用子类重写的方法,已到达多态的效果。

当然,子类中有父类中没有的属性和方法,当我们要调用子类独有的属性和方法是,需要再次转换成子类的引用。

子类向父类转换称为“向上转型”,父类向子类转换称为“向下转型”,向上转型是自动进行的,向下转型要强制类型转换。

要注意的是:只有先向上转型之后,才能向下转型。父类对象不能直接转换成子类对象,编译器不会报错,但是运行时会抛出java.lang.ClassCastException异常

为了避免误操作 向下转型之前先用instanceof运算符判断,这个父类的引用引用的是不是子类的对象。

package learnAgain;

public class SuperToSon
{
	static SuperToSon superToSon=new SuperToSon();
	public static void main(String[] args)
	{
		Person person=superToSon.new Person();
		/*
		 不能直接将父类的对象强制转换为子类类型,子类对象必须先向上转型后,才能再向下转型。
		 */
		
//		Male  male1=(Male)person;//java.lang.ClassCastException:
		if(person instanceof Male)//只有父类的引用指向了子类,也就是先向上转型之后
		{
			Male male1=(Male)person;//才可以再次转换成子类		
			System.out.println("向下转型成功!");
		}
		else 
			System.out.println("请先向上转型");
		
		Male male=superToSon.new Male();
		person=male;//向上转型:子类向父类转换,自动进行
		if(person instanceof Male)
		{
			male=(Male)person;//向下转型:父类向子类转换,要显示强制类型转换
			System.out.println("向下转成功");
		}
		else 
			System.out.println("请先向上转型");
	}
	class Person{}
	class Male extends Person{}
	class Animal{}
}
结果:

请先向上转型
向下转成功


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值