为了账号安全,请及时绑定邮箱和手机立即绑定

如何在接口上有效利用继承和多态性

如何在接口上有效利用继承和多态性

繁华开满天机 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 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信