/**Demonstrates the basics of polymorphism
 * @author TK Rogers
 * @version 3-9-11 */
public class PolymorphismDemo {
   RedSquare red = new RedSquare ( ) ;
   BlueSquare blue = new BlueSquare ( ) ;
   Square square = new Square ( ) ;
  
   public static void main ( ) {
       // Creating a local demo object makes it possible
       // for a static method like main to access an
       // instance method like outPut.
       PolymorphismDemo demo = new PolymorphismDemo ( ) ;
       demo.outPut ( ) ;
   }
  
   public void outPut ( ) {
       System.out.println ( "square area (in^2) = " + square.areaCalculator ( ) ) ;
       System.out.println ( "red squares area (ft^2) = " + red.areaCalculator ( ) ) ;
       System.out.println ( "blue squares area (in^2) = " + blue.areaCalculator ( ) ) ;
   }
}
/** Defines squares*/
import java.awt.* ; // Needed for Color
public class Square {
    double side1, side2 ; // Side in inches
    Color color ;
// Constructors are overloaded
    Square ( )
        side1 = 4.0 ;
        side2 = 4.0 ;
    }
 
    Square ( Color c ) {
        side1 = 2.0 ;
        side2 = 2.0 ;
        color = c ;
    }
 
    public double areaCalculator ( ) {
        return ( side1 * side2 ) ; 
    }
}
/** Defines red squares.*/
import java.awt.* ;
public class RedSquare extends Square {
    RedSquare ( ) {
        super (Color.RED) ;
    }
    // Method below overrides  method
    // with same name in super class
    public double areaCalculator ( ) {
        return ( side1 * side2 / 12.0 ) ; 
    }
}
/**Defines blue squares.*/
import java.awt.* ;
public class BlueSquare extends Square {
    BlueSquare ( ) {
        super (Color.BLUE) ;
    }
}