import java.util.ArrayList;


public class KennelDriver

{   

public static void main( String[] args )

      {

      ArrayList<Pet> animals = new ArrayList<Pet>();

      animals.add( new Dog( "Butch" ) );

      animals.add( new Cat( "Morris" ) );

      animals.add( new LoudDog( "Tiny" ) );

      animals.add( new Dog( "Fido" ) );

      animals.add( new Cat( "Sylvester" ) );

      

      Kennel k1 = new Kennel( animals );

      k1.allSpeak();

      }   

   } // end class KennelDriver


***********************************************************************

import java.util.ArrayList;


public class Kennel

   {

   private ArrayList<Pet> myPets;

   

   

   public Kennel( ArrayList<Pet> p )

      {

      myPets = new ArrayList<Pet>( p );    

      }    

       

   public void allSpeak()

      {

      for( Pet p : myPets )

         {

         System.out.println( p.speak() );

         } // end for

      } // end method allSpeak     

   } // end class Kennel


***********************************************************************

public abstract class Pet

  {

  private String myName;

  

  public Pet( String name )

     {

     myName = new String(name);

     }

     

  public String getName()

     {

     return myName;

     }   

     

  public String toString()

     {

     return myName;

     }  // end method toString 

     

  public abstract String speak();

     

  } // end class Pet



***********************************************************************


public class Cat extends Pet

   {

   public Cat ( String name )

      {

      super( name );

      }

   

   public String speak()

      {

      return "meow";

      }

   } // end class Cat



***********************************************************************

public class Dog extends Pet

   {

   public Dog( String name )

      {

      super( name );

      }

      

        

   public String speak()

      {

      return "ruff";

      } 

        

   } // end class Dog



***********************************************************************

public class LoudDog extends Dog

   {

   public LoudDog( String name )

      {

      super( name );

      } // end constructor LoudDog

      

   public String speak()

      {

      return super.speak() + super.speak();

      }   

   }