Differences between Protocols and subclassing