...
Part 1: Character Class (Superclass)
Create a an abstract class named Character, which will serve as the superclass for all types of characters in the game.
...
This class should have the following methods:
attack()
: Prints an abstract method that will prints a message that the character is attacking (override in the derived class).defend()
: Prints an abstract method that will print a message that the character is defending (override in the derived class).Getter and setter methods for each property.
...
Each subclass should override the attack()
and defend()
method to display a unique attack or defend style. For example, a Warrior might attack with a sword, while a Mage might use a spell. They should also have getter and setter methods for each new property.
...
Good luck and happy coding!
Note on Lab:
You might be wondering why we did not just have a useAbility()
method in our Character class. Reasons are:
Flexibility and Decoupling: Using an interface allows for more flexible and decoupled design. Classes can implement multiple interfaces, enabling them to have a variety of behaviors without being tied to a specific class hierarchy. In contrast, a class can only extend one class, which can lead to a more rigid and tightly coupled design.
Evolution of Design: As the game evolves, you might want to add new types of characters with different special abilities (different interfaces). If you use an interface for special abilities, you can easily add new character types that implement this interface without modifying the existing class hierarchy or affecting other character types.
Specificity of Role: The
SpecialAbility
interface specifically defines the role of having a special ability. It's a clear declaration that any class implementing this interface will provide a particular functionality. This is more specific and targeted than an abstract method in a superclass, which might imply that all subclasses have or need this method's implementation.Encouraging Modular Design: Using interfaces promotes thinking in terms of modular, interchangeable components. This approach fosters designing systems where individual parts can be developed, tested, and debugged independently, then combined to create complex functionalities.
Using an interface like SpecialAbility
in this lab helps in defining clear, flexible, and modular contracts for what characters in the game can do, particularly focusing on their unique abilities, while also allowing for the evolution and expansion of the game's character system.
🚚 Deliverables
Upload the following files in a zip folder that you have created:
...