Added abstract interfaces to force some methods and properties in subclasses