Oi, Weid!
Não é obrigatório usar o this para acessar o getNome(). Como esse método é herdado da classe Pessoa e está como public, você consegue chamá-lo diretamente com getNome(). Usar this.getNome() também funciona, mas fica mais como organização e clareza, não como obrigação.
O this passa a ser realmente importante quando existe conflito de nomes, por exemplo, quando um atributo da classe tem o mesmo nome de um parâmetro do construtor. Fora isso, o Java já entende que você está acessando o método do próprio objeto.
Resolva fazendo o seguinte:
- Mantenha o
getNome() sendo chamado normalmente no exibirDados(). - Use
this apenas se quiser deixar explícito que o acesso é ao objeto atual. - Garanta que o método
main esteja corretamente declarado como public static void.
Ajuste seu código assim:
public class Main {
public static void main(String[] args) {
Pessoa aluno1 = new Aluno("Weid", 22, 8.5);
Pessoa docente = new Docente("Weid", 22, "Filosofia");
aluno1.exibirDados();
docente.exibirDados();
}
}
abstract class Pessoa {
private String nome;
private int idade;
public Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public String getNome() {
return nome;
}
public int getIdade() {
return idade;
}
public abstract void exibirDados();
}
class Aluno extends Pessoa {
private double nota;
public Aluno(String nome, int idade, double nota) {
super(nome, idade);
this.nota = nota;
}
@Override
public void exibirDados() {
System.out.println("Aluno : " + getNome() +
" Idade - " + getIdade() +
" Nota - " + nota);
}
}
class Docente extends Pessoa {
private String disciplina;
public Docente(String nome, int idade, String disciplina) {
super(nome, idade);
this.disciplina = disciplina;
}
@Override
public void exibirDados() {
System.out.println("Docente : " + getNome() +
" Idade - " + getIdade() +
" Disciplina : " + disciplina);
}
}
Fico à disposição. Abraços e bons estudos!