第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在接口上有效利用繼承和多態(tài)性

如何在接口上有效利用繼承和多態(tài)性

繁華開(kāi)滿天機(jī) 2023-06-28 16:13:12
我創(chuàng)建了一個(gè)接口“Polygon”,用于存儲(chǔ)抽象方法:“面積”和“周長(zhǎng)”。但是,當(dāng)實(shí)現(xiàn) Polygon 的類(lèi)涉及計(jì)算面積和周長(zhǎng)的不同計(jì)算時(shí),我不明白如何有效地使用該接口。在我看來(lái),我什至不需要接口“Polygon”,因?yàn)樗谖业拇a中沒(méi)有用處。我嘗試重寫(xiě) Triangle 類(lèi)中的方法“area”,但收到以下錯(cuò)誤:三角形不是抽象的,不會(huì)重寫(xiě)多邊形中的抽象方法area()因?yàn)槿切螀^(qū)域有構(gòu)造函數(shù)。我無(wú)法修改 Polygon 區(qū)域方法以具有與 Triangle 所需的相同數(shù)量的構(gòu)造函數(shù),因?yàn)樗贿m合我的 Rectangle 類(lèi)。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();我已經(jīng)設(shè)法在我的代碼中獲得了我需要的答案,即區(qū)域和周長(zhǎng),但我需要知道如何修改我的代碼以利用繼承和多態(tài)性。
查看完整描述

3 回答

?
千萬(wàn)里不及你

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è)通用的面積方法。


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
拉丁的傳說(shuō)

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)中使用重載方法?


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
翻過(guò)高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為,

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

  2. 實(shí)現(xiàn)的每個(gè)形狀類(lèi)都Polygon應(yīng)該有自己的字段和適當(dāng)?shù)臉?gòu)造函數(shù)來(lái)初始化它們。(例如長(zhǎng)度和高度),將用于面積和周長(zhǎng)的實(shí)現(xiàn)。

所以,

  1. Triangle 類(lèi)應(yīng)該有一個(gè)構(gòu)造函數(shù),

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

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

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


查看完整回答
反對(duì) 回復(fù) 2023-06-28
  • 3 回答
  • 0 關(guān)注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)