Giving partial access to a class using an interface
The solution is an interface. While it is possible to pass a reference of the GameEngine
from GameEngine
, to GameState
this isn't desirable. What we need is a way to give GameState
, direct but limited control. If it had a full reference to GameEngine
it is likely that as the project progressed it would end up creating problems because GameState
had too much access to GameEngine
. For example, what if GameState
decided to pause the game at the wrong time?
Interface refresher
If you think back to Chapter 8, Object-Oriented Programming, an interface is a class without any method bodies. A class can implement an interface and when it does, it must provide the body (including the code) for that method or methods. Furthermore, when a class implements an interface it is an object of that type. When a class is a specific type it can be used polymorphically as that type even if it is other types as well. Here are some examples of this phenomenon...