Como funciona a palavra-chave super em Java?

A palavra-chave super em Java é usada para acessar atributos, métodos e construtores da superclasse em uma relação de herança.

Como funciona a palavra-chave super em Java?

A palavra-chave super em Java é usada dentro de uma subclasse para acessar métodos, atributos e construtores da superclasse. Isso é útil quando há necessidade de reutilizar ou modificar o comportamento herdado.

1. Acessando métodos da superclasse com super

Quando uma subclasse sobrescreve um método da superclasse, ainda podemos chamar a versão original utilizando super.

class Animal {
    void fazerSom() {
        System.out.println("Animal fazendo um som");
    }
}

class Cachorro extends Animal {
    void fazerSom() {
        super.fazerSom(); // Chama o método da superclasse
        System.out.println("Cachorro latindo");
    }
}

public class TesteSuper {
    public static void main(String[] args) {
        Cachorro dog = new Cachorro();
        dog.fazerSom();
    }
}

Saída esperada:

Animal fazendo um som
Cachorro latindo

2. Acessando atributos da superclasse com super

Se um atributo na subclasse tiver o mesmo nome de um atributo na superclasse, usamos super para diferenciar e acessar o atributo da superclasse.

class Pessoa {
    String nome = "Nome genérico";
}

class Estudante extends Pessoa {
    String nome = "Carlos";

    void mostrarNomes() {
        System.out.println("Nome do estudante: " + nome);
        System.out.println("Nome herdado: " + super.nome);
    }
}

3. Chamando o construtor da superclasse com super()

O super() pode ser usado para chamar o construtor da superclasse, garantindo que a inicialização ocorra corretamente.

class Veiculo {
    Veiculo() {
        System.out.println("Veículo criado");
    }
}

class Carro extends Veiculo {
    Carro() {
        super(); // Chama o construtor da superclasse
        System.out.println("Carro criado");
    }
}

Saída esperada:

Veículo criado
Carro criado

4. Regras do uso de super()

  • O super() sempre deve ser a primeira instrução dentro do construtor da subclasse.
  • Se não chamarmos super(), o compilador insere automaticamente um super() para chamar o construtor padrão da superclasse.
  • super() pode ser usado para chamar construtores sobrecarregados.

5. Benefícios do uso de super

  • Evita duplicação de código, reutilizando métodos da superclasse.
  • Permite acesso a atributos e métodos sobrescritos, garantindo que o comportamento original ainda esteja acessível.
  • Facilita a criação de hierarquias de classes, tornando a herança mais flexível.

Conclusão

A palavra-chave super é essencial para manipular herança em Java. Com ela, podemos chamar métodos, atributos e construtores da superclasse, garantindo um design de código mais eficiente e modular. O uso correto do super evita redundâncias e melhora a organização do código.

A palavra-chave super é um dos principais mecanismos que tornam a herança um conceito poderoso na Programação Orientada a Objetos. Muitas vezes, ao trabalhar com classes que compartilham comportamentos similares, é importante manter a flexibilidade no código. O uso de super permite que subclasses reutilizem funcionalidades sem precisar reimplementar código desnecessário. Essa abordagem é comum em frameworks Java, como o Spring, onde classes base definem funcionalidades e subclasses podem chamar métodos da superclasse para preservar lógica centralizada e reaproveitável.

Algumas aplicações:

  • Reutilização de métodos herdados sem sobrescrevê-los completamente
  • Acesso a atributos da superclasse em caso de conflito de nomes
  • Chamada de construtores da superclasse para garantir inicialização adequada
  • Uso em frameworks que utilizam herança para extensibilidade

Dicas para quem está começando

  • Use super.metodo() para chamar métodos da superclasse sobrescritos
  • Utilize super.atributo para acessar atributos herdados
  • O super() deve ser a primeira instrução dentro de um construtor da subclasse
  • Lembre-se de que se uma superclasse não tiver um construtor padrão, você deve chamar super(arg1, arg2) explicitamente
  • Evite dependência excessiva de super, pois pode dificultar a manutenção do código em hierarquias complexas

Contribuições de Rodrigo Farias

Compartilhe este tutorial: Como funciona a palavra-chave super em Java

Compartilhe este tutorial

Continue aprendendo:

O que é herança e como utilizá-la em Java

Herança em Java permite que uma classe reutilize atributos e métodos de outra, promovendo reuso e organização do código.

Tutorial anterior

O que é polimorfismo em Java e como utilizá-lo

O polimorfismo em Java permite que um mesmo método tenha diferentes comportamentos, melhorando a reutilização e flexibilidade do código.

Próximo tutorial