22.多态转型

public class DuoTai_ZhuanXing_02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Animal c=new Cat(); //类型提升。向上转型
		//c.eat();
		
		//如果想要调用猫的特有方法时,如何操作?
		//强制将父类的引用转成子类类型,向下转型
		//Cat cat=(Cat)c;
		//cat.catchMouse();
		//千万不要出现这样的操作,就是将父类对象转成子类类型。
		//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
		//多态自始至终都是子类对象在做着变化
		
		function(new Cat());
		
		function(new Dog());
		
	}
	public static void function(Animal a){ //Animal a=new Cat(); Cat c=(Cat)a;
		a.eat();
		if(a instanceof Cat){
			Cat c=(Cat)a;
			c.catchMouse();
		}else if(a instanceof Dog){
			Dog d=(Dog)a;
			d.kenBone();
		}
	}

}
abstract class Animal1{
	abstract void eat();
}
class Cat1 extends Animal1{
	public void eat(){
		System.out.println("eat fish");
	}
	public void catchMouse(){
		System.out.println("抓老鼠");
	}
}
class Dog1 extends Animal1{

	void eat() {
		System.out.println("eat bone");		
	}
	public void kenBone(){
		System.out.println("啃骨头");
	}
}
class Pig1 extends Animal1{
	void eat(){
		System.out.println("饲料");
	}
	public void gongDi(){
		System.out.println("拱地");
	}
}

  

posted @ 2018-01-03 01:11  一日看尽长安花cxjj  阅读(127)  评论(0)    收藏  举报