You could probably structure your code around a base class for the units providing the common attributes and functionality to all units and provide specialized functionality through interfaces that aren't common to all units.
Example:
We know everything in our game is a
unit so we make a base as follows:
Now we can create a family of classes tying a relationship with the unit class as follows:
Now say we have created the game and for the next release we now decide to include ships with shooting functionality then we create an interface to provide this function as follows:
By declaring this interface any object that needs shooting functionality can implement this interface to provide the shooting functions. And since we know for now that ships can shoot we create the following class:
By following this design we can expand our game based on an abstraction that is loosely coupled making it easy to extend as requirements change.
If we have an aircraft that can shoot we would create it like this:
First create the flyable interface
Now we create an abstraction for all aircrafts
Then create the specialized shooting aircraft
Now to put these units in action we create a ship and an aircraft in our Game class and shoot everything in sight