java--多态的转型

  java中的多态中的语法转换:

只有在是继承关系的前提下才可以进行转型

子---->父 ,向上转型(自动转型)
父---->子 ,向下转型(强制转换)

以下为例子:

public class duotai {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		Animal a2=new Cat();//向上转型,
		//在编译阶段只检查语法,认为a2是animal类型,当运行时,在堆内存创建birds类型赋值给a2
		a2.move();//猫在走路
		
		Cat y=(Cat)a2;//向下转型
		//目前的a2已经是animal了,将他强制转变为cat并用一个cat类型接收
		//向下转型是当需要子类类独有的方法是进行转型
		y.cat();//猫猫捉老鼠!!
		
		Animal a3=new birds();
		//强制转换异常
		//Cat x=(Cat)a3;//将一个内部是birds的类转换为cat,会异常,编译不会报错,因为在表面上看 
                        //来a3是animal类形
		//x.cat();
		
		System.out.println(a3 instanceof Cat);//结果为false,不执行
		//向下转型 以后都要判断
		if(a3 instanceof Cat){//instanceof运算符,判断是否可以转换
			//如果a6是cat,可以进行强制转换
			Cat x=(Cat)a3;
			x.cat();
		}
		
		
	}
}
//动物类,父类
class Animal{
	public void move(){
		System.out.println("动物在移动");
	}
}
//鸟类,子类
class birds extends Animal{
	public void move(){
		System.out.println("鸟在飞");
	}
}
//猫类,子类
class Cat extends Animal{
	public void move(){
		System.out.println("猫在走路");
	}
	public void cat(){
		System.out.println("猫猫捉老鼠!!!");
	}
}

当子类中的方法是独有的时,这时可以选择进行向下转型

instanceof运算符判断的应用:

public class duotai {

	public static void main(String[] args) {
		
		Animal q=new birds();
		Animal w=new Cat();
		
		if(q instanceof birds){
			birds z=(birds)q;
			z.sing();
		}else if(q instanceof Cat){
			Cat e=(Cat)q;
			e.cat();
		}
		
		if(w instanceof birds){
			birds a=(birds)w;
			a.sing();
		}else if(w instanceof Cat){
			Cat f=(Cat)w;
			f.cat();
		}

		
	}
}
//动物类,父类
class Animal{
	public void move(){
		System.out.println("动物在移动");
	}
}
//鸟类,子类
class birds extends Animal{
	public void move(){
		System.out.println("鸟在飞");
	}
	public void sing(){
		System.out.println("鸟在歌唱");
	}
}
//猫类,子类
class Cat extends Animal{
	public void move(){
		System.out.println("猫在走路");
	}
	public void cat(){
		System.out.println("猫猫捉老鼠!!!");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值