Skip to content

Latest commit

 

History

History
39 lines (28 loc) · 1.72 KB

8f65.md

File metadata and controls

39 lines (28 loc) · 1.72 KB

Back to questions

Solution to 8f65: Lucky battling fighters with inheritance

See code at solutions/code/tutorialquestions/question8f65

Compare the sample solution for this question with the sample solution for question 8d24. You will see that in the new solution, the functionality that is common to all fighters is in the Fighter class, while LuckyFighter overrides takeDamage and calculateDamage to add testing of luck according to the three strategies. Look at the way super is used in these methods to invoke the default behaviour. In particular, observe that the calculateDamage method in LuckyFighter uses:

super.calculateDamage() * AGGRESSIVE_MULTIPLIER

and

super.calculateDamage() - MISS_PENALTY

to compute values for double damage and damage reduced by one. By invoking the superclass methods, instead of re-implementing their behaviour, we ensure that any changes to calculateDamage in Fighter will be reflected in the increased or reduced damage calculations in LuckyFighter. To be specific: currently, calculateDamage in Fighter returns 2. However, if we decided to change this method to return, e.g., 4, or to return a value computed from the fighter's skill attribute, LuckyFighter's calculateDamage method would still have the desired effect of doubling, or reducing by one, this new value when a fighter tests his/her luck.

Main.java shows that a LuckyFighter can be used exactly like a Fighter is used:

Fighter elfLord = new LuckyFighter("Alex", "Elf Lord", 18, 6, 11, Strategy.Defensive, gameEngine);

creates a new LuckyFighter and assigns a reference to this object to elfLord, which has type Fighter.