1. That's what I did (and ExtendedDB is just a name). I believe some assignments have DBMain as interface, also a bit awkward in my opinion
2. Definitely a no-go.
You should always program against an interface
3. The more interface you have, the more complex your code would be and the harder it gets for another developer to understand your design
4. I created a shutdown hook (at constructor time), but I also have a method in my custom interface to write methods to the database. This method could be used for periodic saves of the database file
Hope it helps!