//: c08:CatsAndDogs.java // From Thinking in Java, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 1999 // Copyright notice in Copyright.txt // Simple collection with Iterator // // import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import com.bruceeckel.swing.*; import com.bruceeckel.util.*; 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); } } ///:~