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:
The formal context parameters of a subtype are the unbound, formal context parameters of the supertype definition followed by the formal context parameters added in the <specialisation>.
The formal parameters of a specialised process type or procedure are the \formal parameters of the process supertype or procedure followed by the \formal parameters added in the <specialisation>.
The complete valid input signal set of a specialised type is the union of the complete valid input signal set of the<specialisation> and the complete valid input signal set of the supertype.
A specialised signal definition may add (append) data type identifiers to the \data type list of the supertype.
A specialised partial type definition may add properties in terms of operators, literals, axioms, operators and default assignment.
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.