According to Adaic, an interface in Ada is defined as a "tagged type with no components and no concrete operations". It can be used for multiple inheritance. In contrast, an abstract type is a tagged type intended for use as an ancestor of other types, but which is not allowed to have objects of its own.
Is the essential difference between both just the multiple inheritance feature of the interface? Can the types otherwise be used interchangeably?
An interface cannot have any components, and all operations for one must be abstract. An abstract tagged type may have components and may have non-abstract operations.
A concrete type may extend multiple interfaces, but may only extend a single tagged type.
"IMHO, Interfaces are worthless." Randy Brukardt, ARG member and ARM editor