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.