![](/img/trans.png)
[英]Implement a parameterized interface method that has a parameterized class argument with a concrete class
[英]How do I correctly implement an interface with a method that has Object as an argument?
我正在寫一個教授給我們做的作業的程序。
我有一個名為Car
的類,它具有兩個私有實成員x
和y
,它們分別表示汽車在坐標平面中的坐標,並且我想實現一個名為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.