扩展类简介

时间:2012-12-28 01:41:52

标签: java class

我有一个类 Triangle 和一个扩展 Triangle 的类,名为 IsoscelesRight 。 我得到了这个指示,并从我的老师那里得到了 IsoscelesRight 的提示,但我仍然不确定该怎么做。

IsoscelesRight只取一个double值,但设置边以便形成等腰直角三角形。提示:通过将a和b的边设置为相同的值来做到这一点,并且边c将等于2的平方根的边。确保构造函数适当地调用super()。

public class Triangle
{
    private double sideA;
    private double sideB;
    private double sideC;

public Triangle(double a, double b, double c)
{
    sideA = a;
    sideB = b;
    sideC = c;
}

public double getSideA()
{
    return sideA;
}

public double getSideB()
{
    return sideB;
}

public double getSideC()
{
    return sideC;
}
}

以下是 IsoscelesRight 需要更改的全部内容。

public class IsoscelesRight extends Triangle
{
    public IsoscelesRight(double side)
    {
        super(side, side, side);
    }
}

2 个答案:

答案 0 :(得分:1)

你一定在寻找:

public class IsoscelesRight extends Triangle {
  public IsoscelesRight(double side) {
    super(side, side, Math.sqrt(2) * side);
  }
}

我将把研究留给为什么给你,因为这显然是家庭作业。

请注意,如果您只是将此代码提交给您的教授,您几乎肯定会获得f的努力。

稍微好一点(当然也更有启发性)的解决方案是:

public class Isosceles extends Triangle {
  public Isosceles(double side, double hypotenuse) {
    super(side, side, hypotenuse);
  }
}

public class Right extends Isosceles {
  public Right(double side) {
    super(side, Math.sqrt(2) * side);
  }
}

答案 1 :(得分:-1)

在任何三角形中,边都受到Pyphagorean定理的约束,所以如果你打算存储边长,你只需要存储2,并且总是计算第3个(即斜边)。这将占用更少的空间,但需要更多时间来检索斜边,因为SQRT需要时间来计算。所以修改你的模型是因为它不能只存储3个长度用于逻辑上有效的三角形(不需要为3个值占用内存)而不需要在.ctor中进行任何检查。

只需存储A和B侧,斜边根据公式计算:A ^ 2 + B ^ 2 = C ^ 2。 如果您存储所有3个边,则检查值是否根据公式加起来,否则您的三角形将存储逻辑上损坏的数据。

如果我是你的老师,我本来想至少听到这些担忧。实际的类设计可能是应用所需的任何东西 - 无论是速度,性能,数据的逻辑一致性以及上述的所有组合。