Boa tarde, Pessoal.
Comecei a aprender java/POO agora e estou com diculdade em utilizar classes herdadas.
O cenário é o seguinte:
Tenho cinco classes no programa, a classe main (chamada Aplicacao), uma classe Disciplina, uma classe Didatico que compoem a classe Disciplina e duas classes que herdam de Didatico, chamadas de Trabalho e Modulo.
Abaixo os códigos:
public class Disciplina {
// declaração dos atributos da classe
private String codigo;
private String nome;
private int cargaHoraria;
private Didatico [] didatico;
public Disciplina(int qtdDidatico) {
didatico = new Didatico[qtdDidatico];
}
public void setDidatico(Didatico didatico) {
for (int i = 0; i < getDidatico().length; i++) {
if (getDidatico()[i] == null) {
this.didatico[i] = didatico;
break;
}
}
}
//demais metodos gets e sets ...
}
public class Didatico {
private String codigoMaterial;
private String dataMaterial;
private String tipoMaterial;
public Didatico() {
}
//metodos gets e sets ...
}
public class Trabalho extends Didatico {
private String enunciado;
private String orientacao;
private String complexidade;
public Trabalho() {
}
//metodos gets e sets ...
}
public class Modulo extends Didatico {
private String titulo;
private int qtdPagina;
public Modulo() {
}
//metodos gets e sets ...
}
public class Aplicacao {
public static void main(String[] args) {
Disciplina tempDisciplina = new Disciplina(4);//define a quantidade de material didatico por disciplina
tempDisciplina.setNome("Programação Java");
tempDisciplina.setCodigo("100.15");
tempDisciplina.setCargaHoraria(60);
Scanner entrada;
entrada = new Scanner(System.in);
String tipo;
System.out.print("Digite o tipo do Material Didatico : ");
tipo = entrada.nextLine();
O meu problema está quando vou instanticar a classe Disciplina, repare que no metodo construtor da classe instancio o atributo didatico do tipo Didatico, mas, eu nunca utilizo a classe Didatico e sim, as classes herdeiras, mas eu só sei qual classe herdar no momento da execução do código.
Por exemplo, quando o programa está sendo executado, depois de cadastrar os dados da disciplina, é solicitado informar qual o tipo do primeiro material, se for trabalho, deveria instanciar o atributo didatico como do tipo Trabalho e não do tipo Didatico como está no código.
Tentei fazer conforme abaixo, mas, não deu certo.
// continuação da classe Aplicacao
if (tipo.equalsIgnoreCase("trabalho")) {
Didatico tempTrabalho = new Trabalho();// não deu certo, não consigo acessar os metódos especificos da classe Trabalho
tempTrabalho.setTipoMaterial(tipo);
tempTrabalho.setCodigoMaterial("001T");
tempTrabalho.setDataMaterial("01-09-12");
tempTrabalho.setEnunciado("Herança POO");// erro, não é possível acessar o método setEnunciado
tempTrabalho.setOrientacao("Entregar trabalho conforme normas da ABNT");// erro, não é possível acessar o método setOrientacao
tempTrabalho.setComplexidade("media");// erro, não é possível acessar o método setComplexidade
tempDisciplina.setDidatico(tempTrabalho);
}
Tem como resolver esse problema, ou código não está bem escrito?
Obs.: Desculpem se tem algum termo errado, como disse, estou iniciando.

