3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
接口的目的是成為對(duì)象共同特征的抽象視圖。
對(duì)于多邊形,您已經(jīng)確定了它們的一些共同點(diǎn),即所有多邊形都有一個(gè)面積,并且它們都有一個(gè)周長(zhǎng)。
抽象視圖是獲取那些共同的值:
public interface Polygon {
double getArea();
double getPerimeter();
}
當(dāng)然,只有在多邊形被完全定義的情況下,您才能獲得這些值,例如,對(duì)于三角形,底邊和高度可能足以計(jì)算面積,但不能計(jì)算周長(zhǎng)。相反,您通常使用 3 條邊的長(zhǎng)度。
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;
}
}
正如你所看到的,由于計(jì)算面積的輸入不同,根據(jù)多邊形的類(lèi)型,面積方法不能采用一組通用的參數(shù),因此它們必須嵌入到多邊形對(duì)象中,因此我們可以得到一個(gè)通用的面積方法。

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
我看到的第一個(gè)問(wèn)題是您沒(méi)有在實(shí)現(xiàn)該接口的類(lèi)中聲明外圍方法,因此這會(huì)導(dǎo)致編譯器錯(cuò)誤。至于其他人所說(shuō)的,您將在這兩個(gè)方法上返回一個(gè)值,因此它們不應(yīng)該是 void 方法。
另外,為什么在 Triangle 類(lèi)中使用重載方法?

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
我認(rèn)為,
接口中的方法
Polygon
應(yīng)返回值(面積和周長(zhǎng))。實(shí)現(xiàn)的每個(gè)形狀類(lèi)都
Polygon
應(yīng)該有自己的字段和適當(dāng)?shù)臉?gòu)造函數(shù)來(lái)初始化它們。(例如長(zhǎng)度和高度),將用于面積和周長(zhǎng)的實(shí)現(xiàn)。
所以,
Triangle 類(lèi)應(yīng)該有一個(gè)構(gòu)造函數(shù),
public Triangle (final Double base, final Double height) { this.base = base; this.height = height; };
你的區(qū)域方法應(yīng)該是這樣的,
@Override public Double area() { return base * height * (0.5d); }
你應(yīng)該像下面這樣使用它,
final Polygon polygon = new Triangle(13, 212); final Double area = polygon.area(); final Double perimeter = polygon.perimeter();
添加回答
舉報(bào)