- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个接口(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/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!