3
respostas

[Projeto] Sistema escolar

public class Main {
    static void main(String[] args) {
    Pessoa aluno1 = new Aluno("Weid",22,8.5);
    Pessoa docente = new Docente("Weid",22,"Filosofia");
    aluno1.exibirDados();
    docente.exibirDados();

    }
}
public  abstract class Pessoa {
    private String nome;
    private int idade;

    public Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    public int getIdade() {
        return idade;
    }

    public String getNome() {

        return nome;
    }

    public abstract void exibirDados();
}
public class Aluno extends Pessoa{
    private double nota;

    public Aluno(String nome, int idade, double nota) {
        super(nome, idade);
        this.nota = nota;
    }

    public Aluno(String nome, int idade) {
        super(nome, idade);
    }

    @Override
    public void exibirDados() {
        System.out.println("Aluno : " + this.getNome() + " Idade - " + this.getIdade() + " Nota - " + nota );
    }
}
public 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 );

    }
}
3 respostas

Olá, Weid! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei da forma como você usou herança e polimorfismo, criando a classe abstrata Pessoa e sobrescrevendo o método exibirDados() em Aluno e Docente. Fica claro como objetos diferentes respondem ao mesmo método, o que mostra um bom entendimento do conceito.

Uma dica interessante para o futuro é usar @Override sempre que sobrescrever métodos, pois isso ajuda o compilador a identificar erros mais cedo. Veja este exemplo:


@Override
public void exibirDados() {
    System.out.println("Nome: " + getNome());
}

Esse código garante que o método realmente sobrescreve um método da classe pai, evitando problemas de escrita ou assinatura incorreta.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, tudo bem por aqui e por ai Rafaela ?

eu esqueci de colocar o "This" referenciando o objeto, seria isso ?

para trazer o getNome

agora que parei para prestar atenção, obrigado pela pontuação

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!