1
resposta

[Projeto] Sistema Escolar

Optei por usar o modificador de acesso protected ao invés do método getter, para ver o funcionamento.

Pessoa.java

public abstract class Pessoa {
    protected String nome;
    protected int idade;

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

    public abstract void exibirDados();
}

Aluno.java

public 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.printf("Aluno: %s - Idade: %d - Nota: %.1f\n",
                nome, idade, nota);
    }
}

Docente.java

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.printf("Docente: %s - Idade: %d - Disciplina: %s\n",
                nome, idade, disciplina);
    }
}

Principal.java

public class Principal {
    public static void main(String[] args) {
        Pessoa aluno1 = new Aluno("Julia", 16, 8.5);
        Pessoa aluno2 = new Aluno("Caio", 17, 7.2);

        Pessoa docente1 = new Docente("Marta", 40, "Matemática");
        Pessoa docente2 = new Docente("Roberto", 38, "História");

        aluno1.exibirDados();
        aluno2.exibirDados();

        docente1.exibirDados();
        docente2.exibirDados();
    }
}
1 resposta

Oi, Gabriele! Como vai?

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

Gostei da sua iniciativa de testar o uso do modificador protected no lugar de getters. Isso mostra que você quis entender na prática como funciona a herança e o acesso direto aos atributos pelas classes filhas. Sua implementação de polimorfismo com Pessoa sendo referência para Aluno e Docente também ficou bem organizada.

Uma dica interessante para o futuro é usar o metodo super dentro do metodo sobrescrito, caso queira reaproveitar algum comportamento da classe mãe.


public void exibirDados() {
    super.exibirDados();
    System.out.println("Nota: " + nota);
}

Nesse codigo, super.exibirDados() chama o metodo da classe pai antes de adicionar novas informacoes. Isso ajuda a evitar repeticao e melhora a organizacao do codigo.

Conteúdos relacionados
Alura

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