gpt4 book ai didi

java - Java中的抽象类正在运行,显然需要无参数构造函数,返回NaN?

转载 作者:行者123 更新时间:2023-12-01 19:57:50 24 4
gpt4 key购买 nike

所以我现在正在学习java中的抽象类,这个具体要求重写一个父类(super class)Triangle为抽象类,并且有子类RightTriangle、EquisideTriangle返回面积/周长的比率。由于某种原因,当我不在 Triangle 父类(super class)中使用无参数构造函数时,BlueJ 程序会抛出错误。当我使用它时,代码似乎完全忽略子类的主体并为两个值返回 NaN。这是代码:

三角形抽象父类(super class):

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

}

直角三角形子类:

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

}

等边三角形子类:

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

最佳答案

abstract 类中的无参数构造函数不执行任何操作。因此,当您尝试使用 side 初始化子类时,其值仍为 0.0。在您的测试中,您除以零并得到 NaN。只要您明确不调用任何构造函数,您的子类就始终使用默认的无参数构造函数。

阅读here关于构造函数和构造函数调用层次结构。

关于java - Java中的抽象类正在运行,显然需要无参数构造函数,返回NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48877759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com