I am trying to create the character class for a game.
About the character class: -It has different characters, for example warrior, shooter, king. -Each has different properties for example attack, defense.
My question here is should I use Inheritance or composition? I have a Character Class, then should I create warrior class and extends character class or should I just put an identifier like String ID ="Warrior" in the Character class?
What I would do is to use inheritance for the classes + Interfaces if there is an option for a combination of properties (for example, if you have a WarriorKing class).
If you want to enjoy the properties of both types in case of something like WarriorKing you can do something like that:
class Character { ... }
interface Warrior {...}
interface King {...}
abstract class KingImpl extends Character implements King
abstract class WarriorImpl extends Character implements Warrior
And then you combine everything:
class WarriorKing extends Character implements Warrior, King {
private King kingImpl;
private Warrior warriorImpl;
public WarriorKing() {
kingImpl = new KingImpl();
warriorImpl = new WarriorImpl();
}
Now lets say you have a method kill() in the Warrior interface which needs to be implemented by each implementing class (WarriorKing must implement it), and is already implemented in the abstract WarriorImpl class, you can do something like:
class WarriorKing extends Character implements Warrior, King {
private King kingImpl;
private Warrior warriorImpl;
public WarriorKing() {
kingImpl = new KingImpl();
warriorImpl = new WarriorImpl();
}
public void kill() {
this.warriorImpl.kill()
}
}
This way you enjoy all the worlds by having everything implemented once, having a modular class design and you can enjoy any composition of characters you might need. Good luck!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With