//: c07:Shapes.java // From 'Thinking in Java, 2nd ed.' by Bruce Eckel // www.BruceEckel.com. See copyright notice in CopyRight.txt. // Polymorphism in Java. // // import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import com.bruceeckel.swing.*; import com.bruceeckel.util.*; public class Shapes2 extends JApplet { JTextArea Xout = new JTextArea(20, 50); public Shape randShape() { switch((int)(Math.random() * 3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } } public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(new JLabel("Shapes2")); cp.add(new JScrollPane(Xout)); Shape[] s = new Shape[9]; // Fill up the array with shapes: for(int i = 0; i < s.length; i++) s[i] = randShape(); // Make polymorphic method calls: for(int i = 0; i < s.length; i++){ s[i].draw(); s[i].erase(); } } class Shape { void draw() { Xout.append("Generic.draw()\n"); } void erase() { Xout.append("Generic.erase()\n"); } } class Circle extends Shape { void draw() { Xout.append("Circle calling super.draw():-> "); super.draw(); } } class Square extends Shape { void draw() { Xout.append("Square.draw()\n"); } void erase() { Xout.append("Square.erase()\n"); } } class Triangle extends Shape { void draw() { Xout.append("Triangle.draw()\n"); } void erase() { Xout.append("Triangle.erase()\n"); } } public static void main(String[] args) { Console.run(new Shapes2(), 600, 500); } } ///: