So I am learning abstract classes in java right now, this one specifically is asking to rewrite a superclass Triangle to be abstract, and have subclasses RightTriangle, EquilateralTriangle that return the ratio of area / perimeter. For some reason, the BlueJ program is throwing an error when I don't use a no-args constructor in the Triangle superclass. When I use it, the code seems to completely ignore the body of the subclasses and returns NaN for both values. Here is the code:
Triangle abstract superclass:
public abstract class Triangle
{
  private double side;
  public Triangle()
  {
     double s;
  }
  public Triangle(double side)
  {
    super();
    this.side = side;
  }
  public double getSide()
  {
      return side;
  }
  public void setSide(double side)
  {
      this.side = side;
  }
  @Override
  public abstract double getPerimeter();
  @Override
  public abstract double getArea();
  @Override
  public abstract double getRatio();
  @Override
  public abstract String toString();
  public static void main(String[] args)
  {
    Triangle equilateralTr = new RightTriangle(12);
    Triangle rightTr = new EquilateralTriangle(12);
    System.out.println(equilateralTr.toString());
    System.out.println(rightTr.toString());
  }
}
RightTriangle Subclass:
public class RightTriangle extends Triangle
{
    public RightTriangle(double s)
    {
      super.getSide();
    }
    public double getSideVal()
    {
      double s = super.getSide();
      return s;
    }
    public double getPerimeter()
    {
      return (2 + Math.sqrt(2.0)) * getSideVal();
    }
    public double getArea()
    {
      return getSideVal() * getSideVal() / 2;
    }
    public double getRatio()
    {
      return getArea() / getPerimeter();
    }
    public String toString()
    {
      return "Right Triangle: " + getRatio();   
    }
}
EquilateralTriangle subclass:
public class EquilateralTriangle extends Triangle
{
    public EquilateralTriangle(double l)
    {
        l = super.getSide();
    }
    public double getSideVal()
    {
      double l = super.getSide();
      return l;
    }
    public double getPerimeter()
    {
      return 3 * getSideVal();
    }
    public double getArea()
    {
      return Math.sqrt(3) / 4 * getSideVal() * getSideVal();
    }
    public double getRatio()
    {
       return getArea() / getPerimeter();
    }
    public String toString()
    {
      return "Equilateral Triangle: " + getRatio();   
    }
}
 
     
     
    