Differences between protocols and subclassing