I'm not going to go into the interaction here but the basics of what she wanted were the objects: Table and Guest, the metadata that would be stored in each and the basic subsystems to manage them. She also had me lay out the basic processes involved including reserving a table. There was a disagreement as to whether the system assigns guests to tables or the service staff; while in every version of this system I've ever seen the system just knows capacities and sitting times she wanted the system to manage the whole restaurant.
An abstract class may contain instance variables and non-abstract (actually coded) methods, while an interface only contains a list of method headers, and any class implementing the interface must actually implement the interface's methods. A class may implement as many interfaces as it likes but can only have one superclass, abstract classes included.
Having multiple methods of the same name that accept different parameters. It's good to use function overloading if you're modifying an existing code base and you don't want to potentially break the current functionality.
Design (in Object Oriented manner) a restaurant reservation service. No coding necessary beyond class names and method names and rough description of how they work. Then design the SQL database for this system (table names, columns and foreign keys)