Tagging interface for all types whose implementations need to be managed at runtime. Using a java type captures the heirarchical nature of types and provides type safety. The heirarchy represents only the broad functional relationship, between Types.