我们用猫狗案例来表明在java中使用多态的好处:
1 class Animal{ 2 public Animal(){} 3 public void eat(){ 4 System.out.println("吃饭"); 5 } 6 public void sleep(){ 7 System.out.println("睡觉"); 8 } 9 } 10 class Cat extends Animal{ 11 public Cat(){} 12 public void eat(){ 13 System.out.println("猫吃鱼"); 14 } 15 public void sleep(){ 16 System.out.println("猫趴着睡觉"); 17 } 18 } 19 class Dog extends Animal{ 20 public Dog(){} 21 public void eat(){ 22 System.out.println("狗吃肉"); 23 } 24 public void sleep(){ 25 System.out.println("狗站着睡觉"); 26 } 27 } 28 class Pig extends Animal{ 29 public Pig(){} 30 public void eat(){ 31 System.out.println("猪吃草"); 32 } 33 public void sleep(){ 34 System.out.println("猪也趴着睡觉"); 35 } 36 } 37 38 class AnimalTool{ 39 //总结: 使用static方法与priva的原因是,避免有些笨蛋 40 //直接使用创建工具类对象的方式来访问工具类中的方法 41 private AnimalTool(){} 42 /*public static void useCat(Cat c){ 43 c.eat(); 44 c.sleep(); 45 } 46 public static void useDog(Dog d){ 47 d.eat(); 48 d.sleep(); 49 } 50 public static void usePig(Pig p){ 51 p.eat(); 52 p.sleep(); 53 } 54 */ 55 public static void useAnimal(Animal a){ 56 a.eat(); 57 a.sleep(); 58 } 59 60 } 61 class DuoTaiDemo2{ 62 public static void main(String []args){ 63 Cat c=new Cat(); 64 c.eat(); 65 c.sleep(); 66 67 Cat c2=new Cat(); 68 c2.eat(); 69 c2.sleep(); 70 71 Cat c3=new Cat(); 72 c3.eat(); 73 c3.sleep(); 74 System.out.println("----------------"); 75 //接下来是狗 76 Dog d=new Dog(); 77 d.eat(); 78 d.sleep(); 79 80 Dog d2=new Dog(); 81 d2.eat(); 82 d2.sleep(); 83 84 Dog d3=new Dog(); 85 d3.eat(); 86 d3.sleep(); 87 System.out.println("----------------"); 88 89 //接下来是 猪 90 Pig p=new Pig(); 91 p.eat(); 92 p.sleep(); 93 94 Pig p2=new Pig(); 95 p2.eat(); 96 p2.sleep(); 97 98 Pig p3=new Pig(); 99 p3.eat();100 p3.sleep();101 /*102 System.out.println("----------接下来利用工具类实现以上效果----------");103 104 AnimalTool.useCat(c);105 AnimalTool.useCat(c2);106 AnimalTool.useCat(c3);107 108 System.out.println("-------------");109 110 AnimalTool.useDog(d);111 AnimalTool.useDog(d2);112 AnimalTool.useDog(d3);113 114 System.out.println("-------------");115 116 AnimalTool.usePig(p);117 AnimalTool.usePig(p2);118 AnimalTool.usePig(p3);119 */120 System.out.println("----------接下来利用【多态性】类实现以上效果----------");121 Animal cc=new Cat();122 AnimalTool.useAnimal(cc);123 124 Animal dd=new Dog();125 AnimalTool.useAnimal(dd);126 127 Animal pp=new Pig();128 AnimalTool.useAnimal(pp); 129 }130 }
在这个案例中,我们分别使用了三种方法逐渐优化。
第一种---笨方式
直接利用猫狗类创建对象,多次进行调用eat sleep方法,导致存在大量冗余代码。
第二种---创建工具类,将每个动物的eat sleep方法放在各自静态方法中,并将工具类构造方法声明为private,使其仅可通过类名调用。
在这种方法中,AnimalTool.useCat(c);这个语句相当于之前的 c.eat(); 两句,按之前方法,如果我们定义非常多猫,那代码岂不是冗余巨大?
c.sleep() ;
第三种------ 将工具类中各自的方法优化为一个:useAnimal(Animal a), 并在主函数中通过多态的方式创建对象,如 Animal a=new Cat();
这样减少的是工具类中的冗余代码。
以上。