簡體   English   中英

如何使用以Object作為參數的方法正確實現接口?

[英]How do I correctly implement an interface with a method that has Object as an argument?

我正在寫一個教授給我們做的作業的程序。

我有一個名為Car的類,它具有兩個私有實成員xy ,它們分別表示汽車在坐標平面中的坐標,並且我想實現一個名為MyInterface的接口,在其中我聲明了一個方法public boolean compare(Object t) 據說它必須是Object t而不是其他Object t ,以便我可以在多個類(作業的一部分)中實現接口。 Java是有問題的編程語言。

有問題的代碼部分如下所示:

public interface MyInterface {
      public boolean compare(Object t);
}


public class Car implements MyInterface{

      private double x, y;

      @Override
      public boolean compare(Car t) {
          double curdist = Math.sqrt(this.x*this.x + this.y*this.y);
          double givdist = Math.sqrt(t.x*t.x + t.y*t.y);
          if(curdist < givdist) return true;
          else return false;
    }

}

我的方法compare需要計算當前汽車和給定汽車到點(0,0)的距離,並比較兩個距離。 如果當前汽車的距離( curdist )與給定汽車的距離( givdist )接近(0,0),則compare返回true,否則返回false。

我的問題是,如何在Car類中正確實現此方法? 我已經嘗試了一些方法,但是似乎都沒有解決。 感謝您提供任何幫助,因為我對面向對象的編程非常陌生。 提前致謝。

如果必須具有Object作為compare的參數類型,則必須測試傳入的參數的類以確保它首先是Car

在您的Car類中將compare參數更改為Object 然后@Override批注將確定該方法正確覆蓋了實例方法,並且不會出現編譯器錯誤。 使用instanceof運算符確定t是否為Car 如果它不是Car ,或者它為null ,則可以決定引發IllegalArgumentException 然后,您可以將其轉換為Car並繼續執行方法的邏輯。

即使必須將Object用作類,一般而言,更好的方法是使用泛型。 在這里,這將回答這個問題:“這是什么類媲美 ?”。 如果您已經介紹了泛型,則可以理解定義為MyInterface<T> compare方法將采用類型T的參數。 這樣就可以實現在方法Car用類型的參數Car ,提供Car implements MyInterface<Car> 這類似於Java內置的現有Comparable接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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