Uma generalização abstrata é muito parecida com o relacionamento de generalização ou herança entre classes. Com a generalização abstrata, uma classe-pai força a classe-filha a herdar determinada funcionalidade para criar uma interface.
Por exemplo, quando você visualiza uma classe e uma generalização abstrata do C/C++, uma classe-pai pode se tornar uma interface ou um modelo de design. A classe Vehicle é uma classe-pai que utiliza uma generalização abstrata. A classe Vehicle se torna um modelo ou uma interface de design para todas as suas filhas forçando-as a utilizar determinadas operações. A classe-filha Boat herda diversas operações da classe Vehicle. A classe Boat não pode ser implementada sem utilizar essas operações. Portanto, a classe Vehicle age como uma interface de design para todas as suas filhas.
Nos diagramas de classes da visualização UML, uma generalização abstrata é mostrada diferenciando o título da classe das outras classes. Uma classe-pai que utiliza uma generalização abstrata tem um título de classe em letras em itálico. Da mesma forma, todas as operações herdadas por suas filhas (puras operações virtuais) também aparecem em itálico.
A figura a seguir ilustra as diferenças entre um relacionamento de generalização normal e um relacionamento de generalização abstrata.
| Generalização normal do C/C++ | Generalização abstrata do C/C++ |
![]() |
![]() |