Question: what is the difference between public and open?
Answer: An open class is accessible and subclassable outside of the defining module. An open class member is accessible and overridable outside of the defining module. A public class is accessible but not subclassable outside of the defining module.