Instantiation of an abstract type can occur only indirectly, via a concrete subtype.
In generic programming, the analogous notion is a concept, which similarly specifies syntax and semantics, but does not require a subtype relationship: two unrelated types may satisfy the same concept.
Often, abstract types will have one or more implementations provided separately, for example, in the form of concrete subtypes that can be instantiated.
The default keyword can be used to specify a concrete method in an interface.
[citation needed] Abstract types are also an essential part of the Template Method Pattern.