Shape
//
// Shape.java
//
// interfaces declare public methods only, with no implementation
public interface Shape
{
public String getName();
public double getPerimeter();
public double getArea();
}
//
// Rectangle.java
//
public class Rectangle implements Shape
{
public Rectangle(double base, double height)
{
this.base = base;
this.height = height;
}
public String getName()
{
return "Rectangle";
}
public double getPerimeter()
{
return 2*base + 2*height;
}
public double getArea()
{
return base*height;
}
private double base;
private double height;
}
//
// Circle.java
//
public class Circle implements Shape
{
public Circle(double radius)
{
this.radius = radius;
}
public String getName()
{
return "Circle";
}
public double getPerimeter()
{
return 2 * Math.PI * radius;
}
public double getArea()
{
return Math.PI * radius * radius;
}
private double radius;
}
//
// ShapeTest.java
//
import java.util.*;
public class ShapeTest
{
public static void main(String[] args)
{
ArrayList<Shape> shapes = new ArrayList<Shape>();
shapes.add(new Rectangle(1, 2)); // a Rectangle is a Shape
shapes.add(new Rectangle(3, 4));
shapes.add(new Rectangle(6, 14));
shapes.add(new Circle(1)); // a Circle is a Shape
shapes.add(new Circle(10));
for (Shape s : shapes)
{
System.out.println(s.getName() + " " +
s.getPerimeter() + " " +
s.getArea());
}
}
}
Output:
Rectangle 6.0 2.0
Rectangle 14.0 12.0
Rectangle 40.0 84.0
Circle 6.283185307179586 3.141592653589793
Circle 62.83185307179586 314.1592653589793