gpt4 book ai didi

java - 如何在接口(interface)上有效利用继承和多态性

转载 作者:行者123 更新时间:2023-12-02 01:04:41 25 4
gpt4 key购买 nike

我创建了一个接口(interface)“Polygon”,用于存储抽象方法:“面积”和“周长”。但是,当实现 Polygon 的类涉及计算面积和周长的不同计算时,我不明白如何有效地使用该接口(interface)。在我看来,我什至不需要接口(interface)“Polygon”,因为它在我的代码中没有用处。

我尝试重写 Triangle 类中的“area”方法,但收到以下错误:

Triangle is not abstract and does not override abstract method area() in Polygon

因为三角形区域有构造函数。我无法修改 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();

我已经设法在代码中获得了所需的答案,即面积和周长,但我需要知道如何修改代码以利用继承和多态性。

最佳答案

接口(interface)的目的是成为对象共同特征的抽象 View 。

对于多边形,您已经确定了它们的一些共同点,即所有多边形都有一个面积,并且它们都有一个周长。

抽象 View 将获取那些共同的值(value)观:

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;
}
}

正如您所看到的,由于计算面积的输入不同,具体取决于多边形的类型,面积方法不能采用一组通用的参数,因此它们必须嵌入到多边形中对象,因此我们可以获得一个公共(public)区域方法。

关于java - 如何在接口(interface)上有效利用继承和多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57743408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com