3 回答
TA贡献1784条经验 获得超9个赞
接口的目的是成为对象共同特征的抽象视图。
对于多边形,您已经确定了它们的一些共同点,即所有多边形都有一个面积,并且它们都有一个周长。
抽象视图是获取那些共同的值:
public interface Polygon {
double getArea();
double getPerimeter();
}
当然,只有在多边形被完全定义的情况下,您才能获得这些值,例如,对于三角形,底边和高度可能足以计算面积,但不能计算周长。相反,您通常使用 3 条边的长度。
public class Triangle implements Polygon {
private final double a;
private final double b;
private final double c;
public Triangle(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double getArea() {
// Using Heron's Formula
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
@Override
public double getPerimeter() {
return a + b + c;
}
}
矩形更容易。
public class Rectangle implements Polygon {
private final double width;
private final double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
@Override
public double getPerimeter() {
return (width + height) * 2;
}
}
正如你所看到的,由于计算面积的输入不同,根据多边形的类型,面积方法不能采用一组通用的参数,因此它们必须嵌入到多边形对象中,因此我们可以得到一个通用的面积方法。
TA贡献1789条经验 获得超8个赞
我看到的第一个问题是您没有在实现该接口的类中声明外围方法,因此这会导致编译器错误。至于其他人所说的,您将在这两个方法上返回一个值,因此它们不应该是 void 方法。
另外,为什么在 Triangle 类中使用重载方法?
TA贡献1875条经验 获得超3个赞
我认为,
接口中的方法
Polygon
应返回值(面积和周长)。实现的每个形状类都
Polygon
应该有自己的字段和适当的构造函数来初始化它们。(例如长度和高度),将用于面积和周长的实现。
所以,
Triangle 类应该有一个构造函数,
public Triangle (final Double base, final Double height) { this.base = base; this.height = height; };
你的区域方法应该是这样的,
@Override public Double area() { return base * height * (0.5d); }
你应该像下面这样使用它,
final Polygon polygon = new Triangle(13, 212); final Double area = polygon.area(); final Double perimeter = polygon.perimeter();
添加回答
举报