When to use role codes and when to use supertype / subtype

What's the best practice to follow when designing a data model when it comes to choosing between using supertype/subtype and role codes? To be clear, when i say role codes I mean a table design like