多态的作用

来源:互联网 发布:oracle数据库代理商 编辑:程序博客网 时间:2024/04/28 07:31

对象的上转型对象体现了多态。多态的作用:将不同的子类对象统一看做父类,屏蔽了不同子类之间的差异,有子类到父类,有特殊到一般,是程序变得通用。

public class TestPloy{
   public sataic void main(String[] args){
       Dog a0=new Dog();
      Cat a1=new Cat();
      Tiger a2=new Tiger();
      Sheep a3=new Sheep();
      Wolf a4=new Wolf();
      Mouse a5=new Mouse();
      Snake a6=new Snake();
      Monkey a7=new Monkey();
      Cock a8=new Cock();
      YelloMouseWolf a9=new YelloMouseWolf();
 
      a0.eat();
      a1.eat();
      a2.eat();
      a3.eat();
      a4.eat();
      a5.eat();
      a6.eat();
      a7.eat();
      a8.eat();
      a9.eat();
     }
}
class Animal{
   public void eat(){
   }
}
class Dog extends Animal{
   public void eat(){
      System.out.println("Dog eat...")
   }
}
class Cat extends Animal{
   public void eat(){
      System.out.println("Cat eat...")
   }
}
class Tiger extends Animal{
   public void eat(){
      System.out.println("Tiger eat...")
   }
}
class Sheep extends Animal{
   public void eat(){
      System.out.println("Sheep eat...")
   }
}
class Wolf extends Animal{
   public void eat(){
      System.out.println("Wolf eat...")
   }
}
class Mouse extends Animal{
   public void eat(){
      System.out.println("Mouse eat...")
   }
}
class Snake extends Animal{
   public void eat(){
      System.out.println("Snake eat...")
   }
}
class Monkey extends Animal{
   public void eat(){
      System.out.println("Monkey eat...")
   }
}
class Cock extends Animal{
   public void eat(){
      System.out.println("Cock eat...")
   }
}
class YelloMouseWolf extends Animal{
   public void eat(){
      System.out.println("YelloMouseWolf eat...")
   }
}

从上面的程序可以看出比较麻烦,下面是用多态来简化后的程序

public class TestPloy{
   public sataic void main(String[] args){
      Animal[] a=new Animal[10];//将子类对象统一看做父类对象
      a[0]=new Dog();
      a[1]=new Cat();
      a[2]=new Tiger();
      a[3]=new Sheep();
      a[4]=new Wolf();
      a[5]=new Mouse();
      a[6]=new Snake();
      a[7]=new Monkey();
      a[8]=new Cock();
      a[9]=new YelloMouseWolf();
 
 for(int i=0;i<a.length;i++){

                a[i].eat();

         }
}
class Animal{
   public void eat(){
   }
}
class Dog extends Animal{
   public void eat(){
      System.out.println("Dog eat...")
   }
}
class Cat extends Animal{
   public void eat(){
      System.out.println("Cat eat...")
   }
}
class Tiger extends Animal{
   public void eat(){
      System.out.println("Tiger eat...")
   }
}

class Sheep extends Animal{
   public void eat(){
      System.out.println("Sheep eat...")
   }
}
class Wolf extends Animal{
   public void eat(){
      System.out.println("Wolf eat...")
   }
}
class Mouse extends Animal{
   public void eat(){
      System.out.println("Mouse eat...")
   }
}
class Snake extends Animal{
   public void eat(){
      System.out.println("Snake eat...")
   }
}
class Monkey extends Animal{
   public void eat(){
      System.out.println("Monkey eat...")
   }
}
class Cock extends Animal{
   public void eat(){
      System.out.println("Cock eat...")
   }
}
class YelloMouseWolf extends Animal{
   public void eat(){
      System.out.println("YelloMouseWolf eat...")
   }
}

多态的常用方法:

1.把多态用在方法参数上,形参可以是父类引用,实参可以传子类对象。

m(A a):可以用A的任何子类对象作为参数

2.把多态用在方法的返回值上

A m():m方法完全可以返回A的某个子类对象

public class TestPloy{
   public sataic void main(String[] args){
      Dog d=new Dog();
 m1(d);
 Cat c=new Cat();
 m1(c);
 
 Animal a1=m2(10);
 Animal A2=m2(11);
     }
static void m1(Animal a){//多态用在方法的参数上
   a.eat();
}
static Animal m2(int k){//多态用在方法的返回值上
   if(k%2==0) return new Dog();
      else return new Cat();
      }
}
class Animal{
   public void eat(){
   }
}
class Dog extends Animal{
   public void eat(){
      System.out.println("Dog eat...")
   }
}
class Cat extends Animal{
   public void eat(){
      System.out.println("Cat eat...")
   }
}