Herança e o Super

Em suas pesquisas em outras fontes (tutoriais na internet, livros), além do material desta aula, você pode ter encontrado o uso da palavra (ou operador) super nos códigos exemplos.

A palavra super é mais uma das palavras reservadas da linguagem Java que tem uma forte ligação com a herança. A palavra super refere-se à classe ancestral imediata da classe, ou seja, à classe mãe ou super-classe. Ela é usada nos construtores para chamada de construtores em cascata das classes mães.

Listagem 4 - Herança em Java com uso do operador super

A Listagem 4 ilustra um exemplo de herança em Java, que faz uso da palavra-chave super. Vamos então entender o que acontece quando usamos o comando super em tais contextos.

Primeiro, observe que o super é usado para chamar o método construtor da classe mãe. Na classe Transporte, como a classe mãe de Transporte é Object (vimos na aula passada que Object é o ancestral de todas as classes), o super não tem parâmetro. A chamada de super equivale a uma chamada explícita ao construtor sem parâmetro da classe Object.

Já no construtor da classe Terrestre, o super tem como parâmetro a capacidade exigida no construtor da classe Transporte. Portanto, a chamada a super na classe Terrestre é no fundo a chamada ao construtor de Transporte. Já no construtor da classe Automóvel, o super tem como parâmetros a capacidade e o numRodas exigidos pelo construtor da classe Terrestre.

Observando a Listagem 4, dá para observar que uma chamada a super ocasiona a invocação do construtor da classe mãe. Isso acaba permitindo uma chamada em cadeia dos construtores de classes ancestrais, permitindo assim a configuração de todos os atributos herdados da classe.

Vale ressaltar que se o construtor não possui parâmetro, o compilador Java aceita a omissão do super sem parâmetro, porque durante o processo de compilação ele insere explicitamente tal chamada. Para o nosso exemplo, se quiséssemos, poderíamos omitir o super do construtor da classe Transporte.

Anote as Dicas

  1. Apenas comentários são permitidos antes da palavra super nos construtores. Assim, não é possível incluir nenhum comando antes de super() no código de métodos construtores de classes.
  2. Da mesma maneira que se usa a palavra-chave this para acessar os atributos (ou métodos) da própria classe, pode-se usar super para acessar os atributos (ou métodos) da classe mãe.

Versão 5.3 - Todos os Direitos reservados