List get (como acessar métodos da subclasse) ?

É verdade, inclua os metodos get na classe Aluno, com return 0 em cada um. Depois faz um teste.

Fiz o teste sem os Gets e funcionou perfeitamente, pois uso o get só depois do CAST

1 curtida

Tudo funcionando, ficou assim:

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class Main
{
    private static final int INCLUIR_A_ESP = 1;
    private static final int INCLUIR_A_MESTDOUT = 2;
    private static final int LISTAR = 3;
    private static final int SAIR = 4;
    private static int opcao, i, nRegistro;
    private static Aluno aluno;

    public static void main(String[] args)
    {
	boolean continuar = true;
	List<Aluno> lista = new ArrayList<Aluno>();
	
	while(continuar)
	{
	    opcao = Integer.parseInt(JOptionPane.showInputDialog(
		    "Escolha a opcao:\n1) Cadatrar Aluno Especificação.\n2) Cadastrar Aluno Metrado ou Doutorado.\n3) Listar Alunos.\n4) Sair."));
	    if(opcao == INCLUIR_A_ESP)
	    {
		aluno = new Especificacao();//perceba o polimorfismo
		aluno.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
		aluno.setCodMat(Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo de matricula do aluno:")));
		aluno.setNumCred(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de creditos cadastrados do aluno:")));
		String resp = JOptionPane.showInputDialog("Aluno fez a monografia? Sim ou Nao?");
		if(resp.equalsIgnoreCase("sim"))
		{
		    aluno.setMonografia(true);
		}
		else 
		{
		    aluno.setMonografia(false);
		}
		
		lista.add(aluno);
	    }
	    
	    else if(opcao == INCLUIR_A_MESTDOUT)
	    {
		aluno = new MestDout();//perceba o polimorfismo
		aluno.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
		aluno.setCodMat(Integer.parseInt(JOptionPane.showInputDialog("Digite o codigo de matricula do aluno:")));
		aluno.setNumCred(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de creditos cadastrados do aluno:")));
		aluno.setTitulo(JOptionPane.showInputDialog("Digite o titulo da tese:"));
		aluno.setData(JOptionPane.showInputDialog("Digite a data da defesa:"));
		aluno.setConceito(Float.parseFloat(JOptionPane.showInputDialog("Conceito?:")));
		lista.add(aluno);
	    }
	    
	    else if(opcao == LISTAR)
	    {
		nRegistro = lista.size();
		
		for(i=0;i<nRegistro;i++)
		{
		    String sTexto = "";
		    sTexto += "\nNome do Aluno: " + lista.get(i).getNome();
		    sTexto += "\nCódigo da matriculo: " + lista.get(i).getCodMat();
		    sTexto += "\nNumero de creditos cadastrados: " + lista.get(i).getNumCred();
		    
		    if(lista.get(i) instanceof Especificacao)
		    {
			if(((Especificacao)lista.get(i)).getMonografia())
			{
			    sTexto += "\nMonografia situação: OK";
			}
			else
			{
			    sTexto += "\nMonografia situação: NÃO";
			}
		    }
		    
		    if(lista.get(i) instanceof MestDout)
		    {
			sTexto += "\nTitulo da tese é: " + ((MestDout)lista.get(i)).getTitulo();
			sTexto += "\nData da defesa: " + ((MestDout)lista.get(i)).getData();
			sTexto += "\nConceito adquirido: " + ((MestDout)lista.get(i)).getConceito();
		    }		    
		    JOptionPane.showMessageDialog(null, sTexto);
		}
	    }
	    
	    else if(opcao == SAIR)
	    {
		continuar = false;
	    }
	}
    }

}


public class MestDout extends Aluno
{
    private String titulo, data;
    private float conceito;
    
    public MestDout()
    {
	super();
	this.titulo = "";
	this.data= "";
	this.conceito = 0;
    }

    public String getTitulo()
    {
	return titulo;
    }

    public void setTitulo(String titulo)
    {
	this.titulo = titulo;
    }

    public String getData()
    {
	return data;
    }

    public void setData(String data)
    {
	this.data = data;
    }

    public float getConceito()
    {
	return conceito;
    }

    public void setConceito(float conceito)
    {
	this.conceito = conceito;
    }
}


public class Especificacao extends Aluno
{
    private boolean monografia;
    
    public Especificacao()
    {
	super();
	monografia = false;
    }

    public boolean getMonografia()
    {
	return monografia;
    }

    public void setMonografia(boolean monografia)
    {
	this.monografia = monografia;
    }
}


public class Aluno
{
    private String nome;
    private int codMat, numCred;
    
    public Aluno()
    {
	this.nome = "";
	this.codMat = 0;
	this.numCred = 0;
    }
    
    public Aluno(String sNome, int iCodMat, int iNumCred)
    {
	this.nome = sNome;
	this.codMat = iCodMat;
	this.numCred = iNumCred;
    }


    public String getNome()
    {
	return nome;
    }

    public void setNome(String nome)
    {
	this.nome = nome;
    }
    
    public int getCodMat()
    {
	return codMat;
    }

    public void setCodMat(int codMat)
    {
	this.codMat = codMat;
    }
    
    public int getNumCred()
    {
	return numCred;
    }

    public void setNumCred(int numCred)
    {
	this.numCred = numCred;
    }
    
    public void setTitulo(String titulo)
    {

    }

    public void setData(String data)
    {

    }
      
    public void setConceito(float conceito)
    {

    }
       
    public void setMonografia(boolean monografia)
    {

    }
}
1 curtida

Cara, não entendi o porque de colocar os métodos das classes mais específicas na classe Aluno.
Você está quebrando completamente a ideia de herança…

Imagine o seguinte:
Temos uma classe Animal.
Temos as classes Tigre e Tubarao. Essas duas herdam de Animal, ok?
Como eu posso colocar um método anda() na classe Animal??
Tubarões andam também?
Não!. O método anda() deve existir apenas na classe Tigre.

Entende?

Se for pra classe Aluno ter o método getTitulo(), pra quê fazer o cast???