public class TriangleDriver { /** * Constructor for objects of class TriangleDriver */ public TriangleDriver() { EquilateralTriangle equilateralTr = new EquilateralTriangle(12); RightTriangle rightTr = new RightTriangle(12); System.out.println("perfect " + equilateralTr.getRatio()); System.out.println("right " + rightTr.getRatio()); } } public abstract class Triangle { private double side; public Triangle(double a) { side = a; } /** * Return area of triangle. */ public abstract double getArea(); /** * Return Perimeter of triangle. */ public abstract double getPerimeter(); } public class RightTriangle extends Triangle { // instance variables - replace the example below with your own private double side; /** * Constructor for objects of class RightTriangle */ public RightTriangle(double a) { super(a); } public double getPerimeter() { return (2 + Math.sqrt(2.0)) * side; } public double getArea() { return side * side / 2; } /** * Return the area : perimiter ratio */ public double getRatio() { return getArea()/getPerimeter(); } } public class EquilateralTriangle extends Triangle { // instance variables - replace the example below with your own private double side; /** * Constructor for objects of class EquilateralTriangle */ public EquilateralTriangle(double a) { super(a); } public double getArea() { return Math.sqrt(3) / 4 * side * side; } public double getPerimeter() { return 3 * side; } /** * Return the area : perimiter ratio */ public double getRatio() { return getArea()/getPerimeter(); } }