(18)多态 - 上转型与下转型

it2022-05-05  141

若是无多态,示例代码为:

package cn.sg.animal; /**  * 多态的应用,无多态的时候  *   * @author Administrator  *  */ public class Main {               public static void main(String[] args) {         showCat(new Cat());         showDog(new Dog());         showBear(new Bear());     }

         public static void showCat(Cat cat){         cat.eat();         cat.work();     }               public static void showDog(Dog dog){         dog.eat();         dog.work();     }               public static void showBear(Bear bear){         bear.eat();         bear.work();     }

}

 

 

package cn.sg.animal;

public class Bear  {          public void eat(){         System.out.println("吃肉");     }               public void work(){         System.out.println("拳击");     }

}

 

 

package cn.sg.animal;

public class Cat  {          public void eat(){         System.out.println("吃鱼");     }               public void work(){         System.out.println("抓老鼠");     }

}

 

package cn.sg.animal;

public class Dog  {          public void eat(){         System.out.println("吃骨头");     }               public void work(){         System.out.println("看家");     }

}

 

 

package cn.sg.animal;

public class Animal {          public void eat(){         System.out.println("Animal eat");     } }

程序运行:

 

 

 

 

若是有多态,代码可以这样写:

 

package cn.sg.animal001;

public class Animal {          public void eat(){         System.out.println("Animal eat");     } }

 

 

package cn.sg.animal001;

public class Main {               public static void main(String[] args) {         show(new Cat());         show(new Dog());         show(new Bear());     }

    //Animal类具有了多态的性质      public static void show(Animal animal){         //Animal只能调用本类中已经定义的方法         animal.eat();                  //Animal不能调用本类中没有定义的方法         //类型判断         if(animal instanceof Cat){             System.out.println("传进来的是Cat");             //向下转型 

            /**向下转型失败:Animal当中有三个子类,若是没有instanceof,              * 就无法判断是cat dog 还是 bear 此时Cat cat = (Cat)animal; 就会转型失败             */             Cat cat = (Cat)animal;             cat.work();         }else if(animal instanceof Dog){             System.out.println("传进来的是Dog");             //向下转型             Dog dog = (Dog)animal;             dog.work();         }else if (animal instanceof Bear){             System.out.println("传进来的是Bear");             //向下转型             Bear bear = (Bear)animal;             bear.work();                          //向上转型             Animal animal2 =new Cat();             animal2.eat();                      }         

                               }

}  

 

package cn.sg.animal001;

public class Bear extends Animal {          public void eat(){         System.out.println("吃肉");     }               public void work(){         System.out.println("拳击");     }

}  

 

package cn.sg.animal001;

public class Cat extends Animal{          public void eat(){         System.out.println("吃鱼");     }               public void work(){         System.out.println("抓老鼠");     }

}  

 

 

package cn.sg.animal001;

public class Dog extends Animal{          public void eat(){         System.out.println("吃骨头");     }               public void work(){         System.out.println("看家");     }

}

 

package cn.sg.animal001;

public class Animal {          public void eat(){         System.out.println("Animal eat");     } }

程序运行:

 

 

Author:枫叶

 

 


最新回复(0)