Lots of overriding done :3
- Added equals(), hashCode(), and toString() where relevant
- Finalized classes and added private constructors where needed