이것은 제가 잠시 동안 노력해 왔던 문제이며 거의 진행되지 않았습니다. ArrayList를 확장 할 때 추상 클래스를 사용하려고 할 때 많은 문제가 발생했습니다.Java에서 추상 클래스를 사용하여 ArrayList를 확장 하시겠습니까?
내 첫 번째 단계는 추상 클래스 GeometricObject의 모든 구체적인 하위 클래스 인 Circle, Rectangle 및 Triangle의 세 클래스를 정의하는 것이 었습니다. 기본 클래스는 해당 특정 객체에 대한 특정 getPerimeter()
및 getArea()
수식을 사용하여 하위 클래스에서 재정의되는 추상 메서드 getArea()
및 getPerimeter()
을가집니다. 이 부분은 완료되었으며 의도 한대로 작동합니다.
다음 부분은 문제가있는 부분입니다. ArrayList<GeometricObject>
을 확장하는 새로운 클래스 GeoemetricObjectList
을 정의해야합니다. 이 클래스는 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() {
}
}
단순히 방법 getArea()
이 형 GeometricObject에 대한 정의되지하지만 내 GeometricObject 클래스에서 내가 무시되는 공개 추상적 getArea()
이 나는 "이 오류가 totalArea += element.getArea()
을 쓸 때 .. 각 콘크리트에서 getArea()
방법 (삼각형, 원, 사각형) 클래스
나의 다음 문제가 GeometricObjectList에서 remove()
방법입니다 그것은 다음과 같습니다
public boolean remove(GeometricObject element) {
return super.remove(element);
}
"이름 충돌 : GeometricObjectList<GeometricObject>
유형의 메소드 제거 (GeometricObject)가 ArrayList 유형의 remove (Object)와 동일한 지우지 만 무시하지는 않습니다"라는 오류가 발생합니다. add()
메서드를 만들 때이 오류가 발생하지 않았습니다.
이 문제에 대한 도움은 정말 감사하겠습니다. 더 많은 정보가 필요하다면 요청하면됩니다.
@SuppressWarnings ("hiding")? – Hannes
@Override 주석을 잊어 버렸습니다. – Hannes
문제의 일부는 'public class GeometricObjectList'가 GeometricObject라는 * type 매개 변수를 선언한다는 것입니다. 나는 당신이'public 클래스 GeometricObjectList extends ArrayList '라고 가정합니다. –