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();
}
}