A type may be defined as a specialisation of another type. This is done by the following construct:

<specialisation>::= inherits <type-expression> [adding]

Specialisation applies to system, block, process, service, data types, and to signals and procedures, and the same semantics apply in all cases:

All definitions of the supertype are inherited:

Definitions and transitions (where appropriate) may be added in subtypes.

Virtual \transitions and types in the supertype may be redefined in the subtype, but for virtual types only to subtypes of their constraint.

A virtual type or procedure is defined by prefixing the keyword of the diagram (e.g. process or procedure) by one of the keywords virtual, redefined and finalized.

virtual is used when a type is introduced as a virtual type. A virtual type must be a type defined locally to another type; the implication is that it can be redefined in types that inherit from the enclosing type.redefined is used when the redefinition of a virtual type is still virtual. finalized is used when the redefinition is not virtual.