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();
添加回答
舉報