abstract class Shape { // Placeholder abstract public double getArea( ); } class Circle extends Shape { public static final double PI = 3.14; public Circle( double r ) { radius = r; } public String toString( ) { return "Circle with radius " + radius; } public double getArea( ) { return PI * radius * radius; } private double radius; } class Rectangle extends Shape { public Rectangle( double len, double wid ) { length = len; width = wid; } public double getArea( ) { return length * width; } public String toString( ) { return "Rectangle with dimensions " + length + "*" + width; } double length; double width; } /** OPTION #1 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; } **/ /** OPTION #2 */ class Square extends Rectangle { public Square( double s ) { super( s, s ); } } class Day11 { public static double getTotalArea( Shape [ ] arr ) { double sum = 0.0; for( Shape s : arr ) sum += s.getArea( ); return sum; } public static void printArray( Object [ ] arr, String str ) { for( int i = 0; i < arr.length; i++ ) System.out.println( str + "[" + i + "] = " + arr[ i ] ); } public static void main( String [ ] args ) { Circle [ ] arr1 = { new Circle( 2 ), new Circle( 4 ) }; Square [ ] arr2 = { new Square( 2 ), new Square( 4 ) }; printArray( arr1, "Circle" ); System.out.println( "Total area is: " + getTotalArea( arr1 ) ); printArray( arr2, "Square" ); System.out.println( "Total area is: " + getTotalArea( arr2 ) ); Shape [ ] arr3 = { arr1[ 0 ], arr2[ 0 ], arr1[ 1 ], arr2[ 1 ], new Rectangle( 4, 5 ) }; printArray( arr3, "Shape" ); System.out.println( "Total area is: " + getTotalArea( arr3 ) ); } }