Generalização e herança são abstrações poderosas para compartilhar similaridades entre classes e ao mesmo tempo preservar suas diferenças.
Generalização é o relacionamento entre uma classe e um ou mais versões refinadas (especializadas) desta classe. A classe sendo refinada é chamada de superclasse ou classe base, enquanto que a versão refinada da classe é chamada uma subclasse ou classe derivada. Atributos e operações comuns a um grupo de classes derivadas são colocadas como atributos e operações da classe base, sendo compartilhados por cada classe derivada. Diz-se que cada classe derivada herda as características de sua classe base. Algumas vezes, generalização é chamada de relacionamento is-a (é-um), porque cada instância de uma classe derivada é também uma instância da classe base.
Generalização e herança são transitivas, isto é, podem ser recursivamente aplicadas a um número arbitrário de níveis. Cada classe derivada não apenas herda todas as características de todos seus ancestrais como também pode acrescentar seus atributos e operações específicos.
A Figura mostra a notação diagramática
de OMT para representar generalização, um triângulo com
o vértice apontado para a classe base. Um discriminador
pode estar associado a cada associação do tipo
generalização; este é um atributo do tipo
enumeração que indica qual a propriedade de um objeto
está sendo abstraída pelo relacionamento de
generalização. Este discriminador é simplesmente um
nome para a base de generalização.
Uma classe derivada pode sobrepor1.2 uma característica de sua classe base definindo uma característica própria com o mesmo nome. A característica local (da classe derivada) irá refinar e substituir a característica da classe base. Uma característica pode ser sobreposta, por exemplo, por questões de refinamento de especificação ou por questões de desempenho.
Entre as características que podem ser sobrepostas estão valores default de atributos e métodos de operação. Uma boa estratégia de desenvolvimento não deve sobrepor uma característica de forma inconsistente com a semântica da classe base.