[英]Extending abstract classes and using same methods with different arguments
首先,這是我的抽象類:
public abstract class GeometricObject2D implements Comparable {
public abstract boolean contains(GeometricObject2D g);
public abstract boolean contains(double x, double y);
public abstract boolean overlaps(GeometricObject2D g);
public abstract int compareTo(Object temp);
public abstract double getArea();
public abstract double getPerimeter();
}
我應該用另外兩個類擴展它,ComparableCircle2D和ComparableRectangle2D。 兩者都包含所有方法,除了它們在contains和overlapps方法中使用自己的參數,例如:
public class ComparableCircle2D extends GeometricObject2D {
//...
public boolean contains(ComparableCircle2D circle){
//method
}
//...
public boolean overlaps(ComparableCircle2D circle){
//method
}
//...
}
這是我得到的錯誤:
錯誤:(1,8)java:ComparableCircle2D不是抽象的,並且不會覆蓋GeometricObject2D中的抽象方法重疊(GeometricObject2D)。
其他課程也一樣。 我不完全明白什么是錯的,所以非常感謝解釋和解決方案。
PS:爭論必須保持不變。
這是泛型的准確性,請執行以下操作:
abstract class GeometricObject2D<T extends GeometricObject2D> {
public abstract boolean contains(T g);
}
class ComparableCircle2D extends GeometricObject2D<ComparableCircle2D> {
public boolean contains(ComparableCircle2D circle){
return true;
}
}
你不能這樣做。
在您的類中,您必須覆蓋抽象類的所有方法,然后您必須覆蓋該方法:
@Override
public boolean contains(GeometricObject2D g){...}
Hovewer你可以像這樣使用somenthing:
public abstract class GeometricObject2D<T extends GeometricObject2D> {
public abstract boolean contains(T g);
}
在你的子類中:
public class ComparableCircle2D extends GeometricObject2D<ComparableCircle2D> {
@Override
public boolean contains(ComparableCircle2D circle){
// return....;
}
}
你的類必須實現/覆蓋抽象類和接口的所有方法,否則你必須將它標記為abstract
。
public boolean contains(ComparableCircle2D circle){
這不是有效的覆蓋,因為GeometricObject2D
的contains()
方法采用GeometricObject2D
您必須具有完全相同的參數才能覆蓋方法。 因此,您要擴展一個子類,必須實現所有抽象方法。
這是一個適合您的解決方案
public boolean contains(GeometricObject2D circle){
if (!(circle instanceof ComparableCircle2D)) {
throw InputMismatchException();
} else {
// method
}
}
或者(取決於您自己的代碼的邏輯)
public boolean contains(GeometricObject2D circle){
if (!(circle instanceof ComparableCircle2D)) {
return false;
} else {
// method
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.