Thinking in Java Fourth Edition Bruce Eckel Chapter 7 Exercise 4

Exercise 4: Add a new type of Shape to Shapes.java and verify in main( ) that polymorphism works for your new type as it does in the old types.

package polymorphism.shape;

public class Shape {
    public void draw() {
    }

    public void erase() {
    }

    public void amend() {
        System.out.println("Shape.amend()");
    }
}
package polymorphism.shape;

public class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("Triangle.draw()");
    }

    @Override
    public void erase() {
        System.out.println("Triangle.erase()");
    }

    @Override
    public void amend() {
        System.out.println("Triangle.amend()");
    }
}
package polymorphism.shape;

public class Rectangle extends Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle.draw()");
    }

    @Override
    public void erase() {
        System.out.println("Rectangle.erase()");
    }

    @Override
    public void amend() {
        System.out.println("Rectangle.amend()");
    }
}
package polymorphism.shape;

public class Square extends Shape {
    @Override
    public void draw() {
        System.out.println("Square.draw()");
    }

    @Override
    public void erase() {
        System.out.println("Square.erase()");
    }

    @Override
    public void amend() {
        System.out.println("Square.amend()");
    }
}
package polymorphism.shape;

public class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("Circle.draw()");
    }

    @Override
    public void erase() {
        System.out.println("Circle.erase()");
    }

    @Override
    public void amend() {
        System.out.println("Circle.amend()");
    }
}
package polymorphism.shape;

import java.util.*;

public class RandomShapeGenerator4 {
    private Random rand = new Random();

    public Shape next() {
        switch (rand.nextInt(4)) {
        default:
        case 0:
            return new Circle();
        case 1:
            return new Square();
        case 2:
            return new Triangle();
        case 3:
            return new Rectangle();
        }
    }
}
import polymorphism.shape.*;                                                                                        
                                                                                                                   
public class Shapes4 {                                                                                              
    private static RandomShapeGenerator4 gen = new RandomShapeGenerator4();                                        
                                                                                                                   
    public static void main(String[] args) {                                                                        
        Shape[] s = new Shape[10];                                                                                  
        // fill up the array wth shapes:                                                                            
        for (int i = 0; i < s.length; i++)                                                                          
            s[i] = gen.next();                                                                                      
        // make polymorphic method calls:                                                                          
        for (Shape shp : s) {                                                                                      
            shp.draw();                                                                                            
            shp.amend();                                                                                            
        }                                                                                                          
    }                                                                                                              
}

Output:

Leave a Reply

Your email address will not be published. Required fields are marked *