Object-Oriented Programming/Polymorphism/Java

Main.java

edit
// This program demonstrates use of the Polygon, Triangle, Rectangle, and Square classes.

class Main {
    public static void main(String[] args) {
        processPolygons();
        processShapes();
    }

    private static void processPolygons() {
        double [] triangleSides = {3, 4, 5};
        var triangle = new Polygon(triangleSides);
        printSides("triangle", triangle.getSides());
        System.out.print("triangle perimeter: ");
        System.out.println(triangle.getPerimeter());

        double [] rectangleSides = {4, 2, 4, 2};
        var rectangle = new Polygon(rectangleSides);
        printSides("rectangle", rectangle.getSides());
        System.out.print("rectangle perimeter: ");
        System.out.println(rectangle.getPerimeter());

        double [] squareSides = {2, 2, 2, 2};
        var square = new Polygon(squareSides);
        printSides("square", square.getSides());
        System.out.print("square perimeter: ");
        System.out.println(square.getPerimeter());
    }

    private static void processShapes() {
        var triangle = new Triangle(3, 4, 5);
        printSides("triangle", triangle.getSides());
        System.out.print("triangle perimeter: ");
        System.out.println(triangle.getPerimeter());
        System.out.print("triangle area: ");
        System.out.println(triangle.getArea());

        var rectangle = new Rectangle(4, 2);
        printSides("rectangle", rectangle.getSides());
        System.out.print("rectangle perimeter: ");
        System.out.println(rectangle.getPerimeter());
        System.out.print("rectangle area: ");
        System.out.println(rectangle.getArea());

        var square = new Square(2);
        printSides("square", square.getSides());
        System.out.print("square perimeter: ");
        System.out.println(square.getPerimeter());
        System.out.print("square area: ");
        System.out.println(square.getArea());
    }

    private static void printSides(String label, double[] sides) {
        System.out.print(label + " sides: ");
        for (var i = 0; i < sides.length; i++) {
            System.out.print(sides[i]);
            System.out.print(" ");
        }
        System.out.println();
    }
}

Polygon.java

edit
// Supports polygon calculations for perimeter and area.

import java.lang.*;

class Polygon {
    private double[] _sides;

    // Creates a polygon object.
    public Polygon(double[] sides) {
        this._sides = sides;
    }

    // Gets the polygon sides.
    public double[] getSides() {
        return this._sides;
    }

    // Gets the polygon perimeter.
    public double getPerimeter() {
        double perimeter = 0.0;

        for (var i = 0; i < this._sides.length; i++) {
            perimeter += this._sides[i];
        }

        return perimeter;
    }
}

class Triangle extends Polygon {
    public Triangle(double side1, double side2, double side3) {
        super(new double[]{side1, side2, side3});
    }

    // Gets the area of the triangle.
    // References:
    //  https://www.mathsisfun.com/geometry/herons-formula.html
    public double getArea() {
        var s = this.getPerimeter() / 2;
        var a = this.getSides()[0];
        var b = this.getSides()[1];
        var c = this.getSides()[2];
        var area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
        return area;
    }
}

class Rectangle extends Polygon {
    public Rectangle(double length, double width) {
        super(new double[]{length, width, length, width});
    }

    // Gets the area of the rectangle.
    public double getArea() {
        var length = this.getSides()[0];
        var width = this.getSides()[1];
        if (length == width) {
            // Allow for sides in any order.
            width = this.getSides()[2];
        }

        var area = length * width;
        return area;
    }
}

class Square extends Polygon {
    public Square(double side) {
        super(new double[]{side, side, side, side});
    }

    // Gets the area of the square.
    public double getArea() {
        var side = this.getSides()[0];
        var area = side * side;
        return area;
    }
}

Try It

edit

Copy and paste the code above into one of the following free online development environments or use your own Java compiler / interpreter / IDE.

See Also

edit