2015-02-07 140 views
0

我有一個超類定義了一些子類。我有另一個類有一個方法,將傳遞一個擴展超類的對象參數。如果對象的類型設置爲超類,那麼您仍然可以將子類傳遞給該方法嗎? 對不起,如果沒有意義。我可以添加一些代碼作爲例子。在此先感謝對象類型是否可以由它的超類定義?

編輯:

public class Unit { 
    some code. 
} 

public class Infantry extends Unit { 
    some code. 
} 

public class DamageCalculator { 

public double calculateDamage(Unit unit, double damage) { 
    Some code. 
} 

如果我通過型步兵的對象,將編譯器拋出一個錯誤,該步兵對象的類型單位的呢?

+1

分享您的代碼,很容易交談碼比的話;) – MrSimpleMind 2015-02-07 16:19:18

+1

沒有也不會,那是多態是什麼。 – plalx 2015-02-07 16:37:33

+0

鑑於您已經編寫了代碼,爲什麼不嘗試編譯它並回答自己的問題? – 2015-02-07 18:20:50

回答

2

你的例子會編譯得很好。由於步兵的一個實例是一種單位,你可以將它傳遞給方法calculateDamage。編譯器會對此感到滿意。如果在子類中已被覆蓋,則單位上的任何方法calculateDamage調用將在單位或步兵上調用適當的方法。這被稱爲「運行時多態性」。

public class Unit { } 

public class Infantry extends Unit { } 

public class DamageCalculator { 

    public double calculateDamage(Unit unit, double damage) { 
     return damage; // presumably return unit.getStrength() * damage; 
    } 

} 

public class Main { 
    public static void main(String [] a) { 
     Unit i = new Infantry(); 
     DamageCalculator damageCalculator = new DamageCalculator(); 
     double damage = 0.1; 
     double result = damageCalculator.calculateDamage(i, damage); 
    } 
} 
+0

我有點理解,但是,您能否將我的答案修改爲我編輯的答案中提供的代碼?謝謝。 – Jared 2015-02-07 16:33:58

+0

對不起,我原來的回答是我誤解了你的問題。我在上面更正了我的答案。 – bhspencer 2015-02-07 18:07:56

+0

非常感謝。 – Jared 2015-02-07 20:02:01

相關問題