Practical Coding in Java

Learn to write and validate your own code

Darren Kessner, PhD

(revised January 9, 2026)

Previous: Person

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

Next: