簡體   English   中英

擴展抽象類並使用具有不同參數的相同方法

[英]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。 兩者都包含所有方法,除了它們在containsoverlapps方法中使用自己的參數,例如:

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){

這不是有效的覆蓋,因為GeometricObject2Dcontains()方法采用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM