Use super and this to access objects and constructors

Em Java, super e this são palavras-chave utilizadas para acessar membros de uma classe, incluindo métodos, campos e construtores. Vou fornecer exemplos de como usar super e this para acessar objetos e construtores.

Utilizando super para Acessar Membros da Superclasse:

class Animal {
    String tipo = "Animal";

    void fazerSom() {
        System.out.println("Algum som de animal");
    }
}

class Cachorro extends Animal {
    String tipo = "Cachorro";

    @Override
    void fazerSom() {
        super.fazerSom(); // Chamando o método da superclasse
        System.out.println("Latido de cachorro");
    }

    void exibirTipo() {
        System.out.println(super.tipo); // Acessando o campo da superclasse
        System.out.println(this.tipo);  // Acessando o campo da subclasse
    }
}

public class ExemploSuperThis {
    public static void main(String[] args) {
        Cachorro cachorro = new Cachorro();
        cachorro.fazerSom();   // Chamando o método sobrescrito com super
        cachorro.exibirTipo(); // Acessando membros usando super e this
    }
}

Neste exemplo, super.fazerSom() é usado para chamar o método fazerSom() da superclasse Animal dentro da subclasse Cachorro. Além disso, super.tipo é usado para acessar o campo tipo da superclasse.

Utilizando this para Acessar Construtores:

class Pessoa {
    String nome;

    Pessoa(String nome) {
        this.nome = nome; // Usando this para diferenciar entre o parâmetro e o campo
    }

    void exibirNome() {
        System.out.println("Nome: " + this.nome);
    }
}

public class ExemploThisConstrutor {
    public static void main(String[] args) {
        Pessoa pessoa = new Pessoa("Alice");
        pessoa.exibirNome(); // Chamando método para exibir o nome
    }
}

Neste exemplo, this.nome é utilizado dentro do construtor para referenciar o campo nome da classe atual, diferenciando-o do parâmetro nome do construtor.

O uso de super e this é fundamental para distinguir entre membros de classes diferentes e evitar ambiguidades quando há sobreposição de nomes. Em geral, super é usado para acessar membros da superclasse, enquanto this é usado para acessar membros da classe atual.