É 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???