abstract class Shape { // Placeholder, we expect Circle/Square to override public abstract double getArea( ); // Abstract method ==== PLACEHOLDER } class Circle extends Shape { public Circle( double rad ) { radius = rad; } public String toString( ) { return "Circle with radius " + radius; } public double getArea( ) { return 3.14 * radius * radius; } private double radius; } class Square extends Shape { public Square( double s ) { side = s; } public String toString( ) { return "Square with side " + side; } public double getArea( ) { return side * side; } private double side; } class Rectangle extends Shape { public Rectangle( double len, double wid ) { length = len; width = wid; } public String toString( ) { return "Rectangle with dimensions " + length + "x" + width; } public double getArea( ) { return length * width; } private double length; private double width; } public class Day3 { public static void printAll( Object [ ] arr ) { for( Object obj : arr ) System.out.println( obj ); } public static double totalArea( Shape [ ] arr ) { double sum = 0.0; for( Shape s : arr ) if( s != null ) sum += s.getArea( ); return sum; } public static void main( String [ ] args ) { Circle [ ] arr1 = new Circle[ 4 ]; Square [ ] arr2 = new Square[ 3 ]; Rectangle [ ] arr3 = new Rectangle[ 2 ]; Shape [ ] arr4 = new Shape[ 6 ]; arr4[ 0 ] = new Circle( 3.0 ); arr4[ 1 ] = new Circle( 1.0 ); arr4[ 2 ] = new Square( 2.0 ); arr4[ 3 ] = new Square( 4.0 ); arr4[ 4 ] = new Rectangle( 1.0, 15.0 ); arr4[ 5 ] = new Rectangle( 4.0, 3.0 ); printAll( arr4 ); System.out.println( "Total area is " + totalArea( arr4 ) ); } }