Herança de características pelas sub-classes
Quando uma classe é definida em Smalltalk, ela é sempre declarada como uma sub-classe de alguma classe pré-existente, que passa a ser a sua super-classe. Toda classe herda (incorpora) automaticamente todas as características da sua super-classe, exatamente como a classe Roedor herda todas as características da classe Mamífero, e esta as da classe Vertebrado.
Além de herdar as características da super-classe, cada classe pode implementar características adicionais próprias para suas instâncias na forma de novas mensagens e métodos, e de novos componentes na sua estrutura de dados, e também redefinir métodos já existentes acima na hierarquia.
Como exemplo, considere a classe Collection (Coleção), que em Smalltalk é a super-classe de todas as classes cujas instâncias são grupos ou coleções de objetos. A hierarquia de Collection tem, parcialmente, a disposição abaixo: (em Smalltalk/V)
Intuitivamente aceitamos que instâncias de Array (vetores), de String (cadeias de caracteres) ou de Set (conjuntos), são casos particulares (especializações) do conceito genérico de coleção de objetos.
A classe Collection define o protocolo de mensagens comum a todas as suas
sub-classes. Collection não contém diretamente nenhuma
instância, e sua função é apenas a de reunir as
propriedades comuns de todas as coleções. Por esse motivo,
é uma classe dita abstrata. Como ilustração,
as mensagens:
são gerais para qualquer sub-classe e, portanto, faz parte do protocolo de Collection.
As sub-classes de Collection possuem características que as diferenciam entre si.
Bag (literalmente, "saco") é uma classe cujas instâncias são coleções de elementos não ordenados, e onde são permitidas duplicações. Já Set (conjunto) é uma classe onde as instâncias são também coleções de elementos não-ordenados, mas onde não são permitidas duplicações.
Uma instância de Dictionary, sub-classe de Set, é um conjunto especializado, onde cada elemento é formado por uma associação entre um nome (argumento, chave) e um valor, sendo cada argumento único.
IndexedCollection é o nome de uma classe abstrata que fornece o protocolo comum para todas as coleções cujas instâncias são acessíveis através de índices externos. FixedSizeCollection é uma sub-classe desta para todas as coleções indexáveis que possuem tamanho fixo, isto é, não podem ter elementos removidos ou acrescentados (podem somente ter os valores de seus elementos modificados). Já OrderedCollection é outra sub-classe de IndexedCollection cujas instâncias aumentam dinâmicamnete de tamanho para acomodar novos elementos.
A classe Collection e suas subclasses serão vistas com maior detalhe em Classes Básicas da Linguagem Smalltalk.