这是我已经研究了一段时间的问题,而且我几乎没有取得任何进展。在扩展ArrayList时尝试使用抽象类时遇到了很多问题。
我的第一步是定义三个类,Circle,Rectangle和Triangle,它们都是抽象类GeometricObject的具体子类。基类具有抽象方法getArea()
和getPerimeter()
,这些抽象方法在子类中被该特定对象的特定getPerimeter()
和getArea()
公式覆盖。本部分已完成,并且按预期工作。
下一部分是我遇到麻烦的地方。我应该定义一个扩展GeoemetricObjectList
的新类ArrayList<GeometricObject>
。此类应覆盖add()
,remove()
和clear()
方法。此类在列表上保留对象的totalArea和totalPerimeter变量。
现在,坦率地说,我在我要清除的GeometricObjectList add()
方法中创建了一个凌乱的if语句列表。到目前为止,这是我该课程的代码:
import java.util.ArrayList;
@SuppressWarnings("hiding")
public class GeometricObjectList<GeometricObject> extends ArrayList<GeometricObject>{
final static long serialVersionUID = 1L;
public double totalArea = 0;
public double totalPerimeter = 0;
public boolean add(GeometricObject element){
if(element instanceof Rectangle) {
totalArea += ((Rectangle)element).getArea();
totalPerimeter += ((Rectangle)element).getPerimeter();
}
if(element instanceof Circle) {
totalArea += ((Circle)element).getArea();
totalPerimeter += ((Circle)element).getArea();
}
if(element instanceof Triangle) {
totalArea += ((Triangle)element).getArea();
totalPerimeter +=((Triangle)element).getArea();
}
return super.add(element);
}
public boolean remove(GoemetricObject element) {
return super.remove(element);
}
public void clear() {
}
}
当我简单地写
totalArea += element.getArea()
时,会出现错误“对于类型GeometricObject,未定义方法getArea()
,但在我的GeometricObject类中,我有一个公共摘要getArea()
,在每个混凝土中,该摘要都由getArea()
方法覆盖(三角形,圆,矩形)类。我的下一个问题是GeometricObjectList中的
remove()
方法。看起来像这样:public boolean remove(GeometricObject element) {
return super.remove(element);
}
我收到错误消息“名称冲突:类型为
GeometricObjectList<GeometricObject>
的方法remove(GeometricObject)具有与ArrayList类型的remove(Object)相同的擦除,但是没有覆盖它”。创建add()
方法时,我从未收到此错误。非常感谢您的任何帮助。如果有更多信息,您需要索取,我将在一秒钟之内完成!
最佳答案
您确实遇到了几个不同的问题-包括拼写和隐藏,
// Make sure you have these methods in your GeometricObject.
// private static abstract class GeometricObject {
// public abstract double getArea();
// public abstract double getPerimiter();
// }
// Do not use that annotation. It was warning you!
public class GeometricObjectList extends
ArrayList<GeometricObject> {
final static long serialVersionUID = 1L;
public double totalArea = 0;
public double totalPerimeter = 0;
public boolean add(GeometricObject element) {
if (element != null && super.add(element)) {
totalArea += element.getArea(); // add area
totalPerimeter += element.getPerimiter(); // add perimeter
return true;
}
return false;
}
public boolean remove(GeometricObject element) { // Spelling!
if (element != null && super.remove(element)) {
totalArea -= element.getArea(); // subtract area
totalPerimeter -= element.getPerimiter(); // subtract perimeter
return true;
}
return false;
}
public void clear() {
super.clear();
}
}
关于java - 用Java中的抽象类扩展ArrayList?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23235129/