CatsAndDogs.java





public class CatsAndDogs extends JApplet {
  JTextArea  Xout  = new JTextArea(10, 30);
  public void init() {
    Container cp = getContentPane();
    cp.setLayout(new FlowLayout());
    cp.add(new JLabel("CatsAndDogs"));
    cp.add(new JScrollPane(Xout));
    ArrayList cats = new ArrayList();
    for(int i = 0; i < 7; i++)
      cats.add(new Cat(i));
    // Not a problem to add a dog to cats:
    cats.add(new Dog(7));
    Iterator e = cats.iterator();
    while(e.hasNext())
      try{
      ((Pet)e.next()).print();
    // Dog is detected only at run-time
      }catch (Exception ex) {
          Xout.append("Class Cast Exception\n" );
          ex.printStackTrace();
      }
  }

 class Pet {
  void print() {
  }
 }


 class Cat extends Pet {
  private int catNumber;
  Cat(int i) {
    catNumber = i;
  }
  void print() {
    Xout.append("Cat number " +catNumber + "\n");
  }
 }

 class Dog  extends Pet{
  private int dogNumber;
  Dog(int i) {
    dogNumber = i;
  }
  void print() {
    Xout.append("Dog number " +dogNumber + "\n");
  }
 }
 public static void main(String[] args) {
        Console.run(new CatsAndDogs(), 350, 250);
 }
} ///:~