/* * ====================================================================== * TestShape.java : Demonstrate use of abstract class for shapes. * Subclass Shape with class Rectangle and class Circle. * * Written by Mark Austin March, 2000 * ====================================================================== */ import java.lang.Math; // Location of a point ( dX, dY). class Location { double dX, dY; } // Abstract class of Shapes abstract class Shape { Location c = new Location(); public abstract String toString(); public abstract double perimeter(); } // Class of Rectangles. class Rectangle extends Shape { double dSide1, dSide2; // Rectangle constructor ..... public Rectangle ( double dSide1, double dSide2, double dX, double dY ) { this.dSide1 = dSide1; this.dSide2 = dSide2; c.dX = dX; c.dY = dY; } public String toString() { return "Rectangle : Side1 = " + dSide1 + " Side2 = " + dSide2 ; } public double perimeter() { return 2.0*(dSide1 + dSide2); } } // Class of Circles. class Circle extends Shape { double dDiameter; // Circle constructor .... public Circle ( double dDiameter, double dX, double dY ) { this.dDiameter = dDiameter; c.dX = dX; c.dY = dY; } public String toString() { return "Circle : Diameter = " + dDiameter + " [x,y] = ["+ c.dX + "," + c.dY + "]"; } public double perimeter() { return Math.PI*dDiameter*dDiameter/4.0; } } public class TestShape { public static void main ( String args[] ) { Shape s[] = new Shape [2] ; s[0] = new Rectangle( 2.0, 2.0, 2.0, 2.0 ); s[1] = new Circle( 2.0, 2.0, 2.0 ); // Print details of the array of shapes for (int ii = 1; ii <= s.length; ii = ii + 1) { System.out.println( s[ii-1].toString() ); System.out.println( "Perimeter = " + s[ii-1].perimeter() ); } } }