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("拱地"); } }