亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在接口上有效利用繼承和多態性

如何在接口上有效利用繼承和多態性

繁華開滿天機 2023-06-28 16:13:12
我創建了一個接口“Polygon”,用于存儲抽象方法:“面積”和“周長”。但是,當實現 Polygon 的類涉及計算面積和周長的不同計算時,我不明白如何有效地使用該接口。在我看來,我什至不需要接口“Polygon”,因為它在我的代碼中沒有用處。我嘗試重寫 Triangle 類中的方法“area”,但收到以下錯誤:三角形不是抽象的,不會重寫多邊形中的抽象方法area()因為三角形區域有構造函數。我無法修改 Polygon 區域方法以具有與 Triangle 所需的相同數量的構造函數,因為它不適合我的 Rectangle 類。public interface Polygon {    void area();    void perimeter();}class Triangle implements Polygon{    private double triangleArea;    private double trianglePerimeter;    public Triangle (){};    public void area(){}; //I've tried overriding method here but get a         compiler error since it is not identical to the Polygon method.    public  double area(double base, double height){       triangleArea = base * height * (.5);       return triangleArea;    }public class Project25 {public static void main(String[] args) {    Triangle testTriangle = new Triangle();    testTriangle.area(2, 2);    testTriangle.printArea();我已經設法在我的代碼中獲得了我需要的答案,即區域和周長,但我需要知道如何修改我的代碼以利用繼承和多態性。
查看完整描述

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;

    }

}

正如你所看到的,由于計算面積的輸入不同,根據多邊形的類型,面積方法不能采用一組通用的參數,因此它們必須嵌入到多邊形對象中,因此我們可以得到一個通用的面積方法。


查看完整回答
反對 回復 2023-06-28
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

我看到的第一個問題是您沒有在實現該接口的類中聲明外圍方法,因此這會導致編譯器錯誤。至于其他人所說的,您將在這兩個方法上返回一個值,因此它們不應該是 void 方法。

另外,為什么在 Triangle 類中使用重載方法?


查看完整回答
反對 回復 2023-06-28
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

我認為,

  1. 接口中的方法Polygon應返回值(面積和周長)。

  2. 實現的每個形狀類都Polygon應該有自己的字段和適當的構造函數來初始化它們。(例如長度和高度),將用于面積和周長的實現。

所以,

  1. Triangle 類應該有一個構造函數,

    public Triangle (final Double base, final Double height) { 
      this.base = base; 
        this.height = height;
    };
  2. 你的區域方法應該是這樣的,

     @Override
     public Double area() { 
      return base * height * (0.5d);
     }
  3. 你應該像下面這樣使用它,

    final Polygon polygon = new Triangle(13, 212);
    final Double area = polygon.area();
    final Double perimeter = polygon.perimeter();


查看完整回答
反對 回復 2023-06-28
  • 3 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號