我创建了一个接口“多边形”,用于存储抽象方法:“区域”和“周边”。但是,当实现Polygon的类在计算面积和周长时涉及不同的计算时,我不理解如何有效地使用该接口。我认为,我甚至不需要接口“多边形”,因为它在我的代码中没有用。
我尝试覆盖Triangle类中的方法“ area”,但收到以下错误:
三角形不是抽象的,也不覆盖多边形中的抽象方法area()
因为Triangle区域具有构造函数。我不能修改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();
我已经设法在代码中找到所需的答案,即面积和周长,但是我需要知道如何修改代码以利用继承和多态性。
答案 0 :(得分:0)
接口的目的是成为对象共同特征的抽象视图。
如果是多边形,您已经确定了它们共同的一些特征,即所有多边形都有面积,并且它们都有周长。
抽象视图将是 获取 这些常用值:
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;
}
}
如您所见,由于用于计算面积的输入不同,根据多边形的类型,Area方法不能采用一组通用的参数,因此必须将其嵌入到多边形中对象,这样我们就可以得到 common 区域方法。
答案 1 :(得分:0)
我认为,
Polygon
界面中的方法应返回值(面积和周长)。Polygon
的每个shape类都应具有自己的字段和适当的构造函数以对其进行初始化。 (例如长度和高度),将用于实现面积和周长。所以
Class Triangle应该有一个构造函数,
public Triangle (final Double base, final Double height) {
this.base = base;
this.height = height;
};
您的区域方法应类似于
@Override
public Double area() {
return base * height * (0.5d);
}
您应该像下面这样使用它,
final Polygon polygon = new Triangle(13, 212);
final Double area = polygon.area();
final Double perimeter = polygon.perimeter();
答案 2 :(得分:0)
我看到的第一个问题是,您没有在实现该接口的类中声明perimeter方法,因此这会导致那里的编译器错误。至于其他人所说的,您在这两个方法上都返回了一个值,因此它们不应为空方法。
此外,为什么在Triangle类中使用重载方法?