我有多個不同的類(Star, Planet, Moon),每個類都有不同的繪制方法,我希望能夠通過draw()一次呼叫呼叫它們各自的方法,而不必將它們轉換為 3 次不同的時間。
Object solarObject = solarObjects.get(i);
if (solarObject.getClass() == Star.class) ((Star) solarObject).draw(system);
if (solarObject.getClass() == Planet.class) ((Planet) solarObject).draw(system);
if (solarObject.getClass() == Moon.class) ((Moon) solarObject).draw(system);
我想做的是這個
Object solarObject = solarObjects.get(i);
solarObject.draw(system);
我做了一個不同的嘗試是這個
solarObject.getClass().cast(solarObject).draw(system);
但它給出了錯誤The method draw is undefined for the type
有沒有辦法在 Java 中實作這種行為?
uj5u.com熱心網友回復:
為了通過整潔的型別轉換實作相同的作業,您可以使這些類成為公共抽象/具體超類的子類,或者讓它們實作一個公共介面(以適合您的專案設計為準)。這樣,您可以將任何子類物件存盤到該介面并在其上呼叫“draw()”方法(無論物件型別如何,因為它們都實作了相同的介面)。
代碼:
public interface CelestialBody {
void draw();
}
public class Star implements CelestialBody{
public void draw(){}
}
public class Planet implements CelestialBody{
public void draw(){}
}
演示:
public class Driver {
public static void main(String[] args) {
CelestialBody solarObject1 = new Star();
CelestialBody solarObject2 = new Planet();
if (solarObject1 instanceof CelestialBody)
solarObject1.draw();
if (solarObject2 instanceof CelestialBody)
solarObject2.draw();
}
}
請注意,當接受未知物件時,我們在參考它之前使用“instanceof”運算子(這是為了確保輸入的物件實際上是“CelestialBody”型別)。
這種型別的問題是通過繼承解決的。我會鼓勵你閱讀更多關于它的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520867.html
標籤:爪哇班级目的铸件
下一篇:對不同型別物件的陣列進行排序
