【发布时间】:2019-07-27 18:51:07
【问题描述】:
好的。编写一个具有 Class 2D 类的程序,该类包含计算体积和表面形状的方法。然后 创建继承 Class 2D 类并实现其方法的类 Rectangle、Circle 和 Triangle。对于 Rectangle、Circle 和 Triangle 类来声明计算体积和表面所需的属性。然后制作一个ShapeUtill 类。 ShapeUtill 类应该包含并实现静态方法 体积和表面两种形式的比较(共2种方法)。方法应该接收泛型类型,例如 必须是Form 2D继承的类的参数
在我的主要问题之前,我尝试从一个类到另一个类实现(覆盖)方法,我这样做是好的还是?
@Override
public void areaAndVolumeOfCircle(Circle c) {
double areaCircle = Math.pow(c.getR(), 2) * Math.PI;
double volumeCircle = 2 * c.getR() * Math.PI;
}
所以我的主要问题是,如何实现两种通用方法来比较两个形状(圆形、矩形或三角形)的面积和体积。
在我的 Shape2D 类中,我有以下方法:
public void areaAndVolumeOfCircle(Circle c) {
double areaCircle = Math.pow(c.getR(), 2) * Math.PI;
double volumeCircle = 2 * c.getR() * Math.PI;
}
public void areaAndVolumeOfRectangual(Rectangular r) {
double areaRectangle = r.getA() * r.getB();
double volumeRectangle = (2 * r.getA()) + (2 * r.getB());
}
public void pIObimTrougla(Triangle t) {
double areaTriangle = t.getA() + t.getB() + t.getC();
double volumeTriangle = (t.getB() * t.getH() / 2);
}
另外,Circle, Rectangular, Triangle 类扩展了Shape2D 类。
所以我想在新类ShapeUtil 中实现两个静态泛型方法来比较两个对象。
我用这种方法试过了,但是不行(类型Circle不带参数)
public static <T, I> void compare(Cicle<T, I> c, Rectangular<T, I> r) {
}
谢谢你,如果我需要更好地解释的话,我在这里!
【问题讨论】:
-
在 Shape2D 中创建一个抽象的
area()方法,并在每个子类中覆盖它。删除所有 areaAndVolumeOfXxx 方法。然后写一个方法compareByArea(Shape2D shape1, Shape2D shape2) -
@JohnWilliams 这就像想用锤子旅行。锤子对某些任务很有用,比如敲钉子。但不适合旅行。泛型在这里没用。给定您的代码,您应该首先学习一些重要的概念,例如继承、多态、实例与静态方法/
-
我告诉过你怎么做:在 Shape2D 中创建一个抽象 area() 方法,并在每个子类中覆盖它。那么,你试过这样做吗?我还告诉过你,使用泛型来解决这个问题是没有意义的。您是否阅读并理解此评论?
-
标记了你的评论,这家伙比你更懂 Java。而这绝对不是泛型应该解决的问题
-
请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 3.0 license 下授予 SE 分发内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。