Problema com Herança

13 respostas
java
P

Pessoal, boa tarde. É a primeira vez na vida que preciso recorrer a um fórum e enfim, espero que consigam me ajudar.

Sou bem novato em programação e etc. e estou desenvolvendo um trabalho da faculdade, que consiste em criar um sistema acadêmico simples utilizando persistência de arquivos (acho que pode se dizer assim). Enfim, Criei uma classe Coordenador que herda os atributos da classe Professor. Na classe Coordenador possuo um método para Imprimir os dados do Coordenador (inclusive os herdados do professor). Bom, o meu método imprimirCoordenador() está dando erro. Desculpem qualquer erro de escrita ou em explicação de termos técnicos. Sou bem novo na área.

package faculdadesuperti;

import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Coordenador extends Professor {
	//coordenador
	public static int[] matriculaCoordenador;
	public static Date[] admissaoCoordenador;
	
	public Coordenador(int[] matriculaCoordenador, Date[] admissaoCoordenador,int[] matriculaProfessores, String[] nomeProfessores, Date[] admissaoProfessores, String[] emailProfessores, String[] telefoneProfessores) {
		super(matriculaProfessores,nomeProfessores,admissaoProfessores,emailProfessores,telefoneProfessores);
		this.matriculaCoordenador= matriculaCoordenador;
		this.admissaoCoordenador= admissaoCoordenador;
	}
	
	public static void lerCoordenador() throws IOException, ParseException {
		String dadosCoordenador = "src/coordenador.txt";
		FileReader fileReader= new FileReader(dadosCoordenador);
		Scanner input= new Scanner(fileReader);
		int listarDadosCoordenador= 0;
		
		while(input.hasNextLine()) {
			input.nextLine();
			listarDadosCoordenador++;
		}
		
		input.close();
		
		matriculaCoordenador= new int[listarDadosCoordenador];
		admissaoCoordenador= new Date[listarDadosCoordenador];
		
		fileReader= new FileReader(dadosCoordenador);
		input = new Scanner (fileReader);
		input.useDelimiter("\r\n|;");
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		
		for (int i=0; i< listarDadosCoordenador; i++) {
			int matricula = input.nextInt();
			Date admissao= dateFormat.parse(input.next());
			matriculaCoordenador[i] = matricula;
			admissaoCoordenador[i] = admissao;
		}
		
		input.close();
	}
	
	public static void imprimirCoordenador() throws IOException, ParseException {
		Coordenador Coordenador=new Coordenador();
		Coordenador.lerCoordenador();
		
		for(int i=0;i<matriculaCoordenador.length;i++) {
			System.out.println(matriculaCoordenador[i] + "," + admissaoCoordenador[i]);
		}
	}
}
package faculdadesuperti;

import java.io.IOException;
import java.text.ParseException;
import java.util.Scanner;

public class MenuPrincipal {
	
	static void menuPrincipal() throws IOException, ParseException {
		Scanner input= new Scanner(System.in);
		int opcaoSelecionada;
		
		do {
			Scanner matricula= new Scanner(System.in);
			System.out.println("Escolha uma opção: ");
			System.out.println("1. Secretaria Acadêmica");
			System.out.println("2. Coordenador");
			System.out.println("3. Professor");
			System.out.println("4. Sair");
			
			opcaoSelecionada = input.nextInt();
			
			if(opcaoSelecionada==1) {
				menuSecretaria();
			} else if(opcaoSelecionada==2) {
				menuCoordenacao();
			} else if(opcaoSelecionada==3) {
				menuProfessores();
			} else if(opcaoSelecionada==4) {
				System.out.println("Obrigado por utilizar nosso sistema!");
				System.exit(0);
			}
		} while(opcaoSelecionada > 4 || opcaoSelecionada < 1);
	}
	
	private static void menuSecretaria() throws IOException, ParseException {
		Scanner input= new Scanner(System.in);
		int opcaoEscolhida;
		
		do {
			System.out.println("Menu da Secretaria Acadêmica");
			System.out.println("1. Listar dados do coordenador de curso");
			System.out.println("2. Voltar");
			opcaoEscolhida= input.nextInt();
			
			if(opcaoEscolhida == 1) {
				Coordenador Coordenador= new Coordenador();
				Coordenador.imprimirCoordenador();
				menuSecretaria();
			} else if(opcaoEscolhida == 2) {
				menuPrincipal();
			}
		} while(opcaoEscolhida < 1 || opcaoEscolhida > 2);
	}
	
	private static void menuCoordenacao() throws IOException, ParseException {
		Scanner input= new Scanner(System.in);
		int opcaoEscolhida;
		
		do {
			System.out.println("Menu da Coordenação");
			System.out.println("1. Listar dados do professor pela matrícula");
			System.out.println("2. Listar todos os professores");
			System.out.println("3. Listar dados do aluno pelo RA");
			System.out.println("4. Listar todos os alunos");
			System.out.println("5. Voltar");
			opcaoEscolhida= input.nextInt();
			
			if(opcaoEscolhida == 1) {
				/*listarDadosProfessor*/
			} else if(opcaoEscolhida == 2) {
				/*listarTodosProfessores*/
			} else if(opcaoEscolhida == 3) {
				/*listarAlunosPeloRa*/
			} else if(opcaoEscolhida == 4) {
				/*listarTodosAlunos*/
			} else if(opcaoEscolhida == 5) {
				menuPrincipal();
			}
		} while(opcaoEscolhida < 1 || opcaoEscolhida > 5);
	}
	
	private static void menuProfessores() throws IOException, ParseException {
		Scanner input= new Scanner(System.in);
		int opcaoEscolhida;
		
		do {
			System.out.println("Menu de Professores");
			System.out.println("1. Listar alunos em minha disciplina");
			System.out.println("2. Alimentar banco de notas");
			System.out.println("3. Alimentar banco de faltas");
			System.out.println("4. Gerar ata");
			System.out.println("5. Voltar");
			opcaoEscolhida = input.nextInt();
			
			if(opcaoEscolhida == 1) {
				/*listarAlunosMinhaDisciplina*/
			} else if(opcaoEscolhida == 2) {
				/*alimentarBancoNotas*/
			} else if(opcaoEscolhida == 3) {
				/*alimentarBancoFaltas*/
			} else if(opcaoEscolhida == 4) {
				/*gerarAta*/
			} else if(opcaoEscolhida == 5) {
				menuPrincipal();
			}
		} while(opcaoEscolhida < 1 || opcaoEscolhida > 5);
	}
}
package faculdadesuperti;

import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Professor {
	//professores
	public static int[] matriculaProfessores;
	public static String[] nomeProfessores;
	public static Date[] admissaoProfessores;
	public static String[] emailProfessores;
	public static String[] telefoneProfessores;
	
	public Professor(int[] matriculaProfessores, String[] nomeProfessores, Date[] admissaoProfessores, String[] emailProfessores, String[] telefoneProfessores) {
		this.matriculaProfessores = matriculaProfessores;
		this.nomeProfessores = nomeProfessores;
		this.admissaoProfessores = admissaoProfessores;
		this.emailProfessores = emailProfessores;
		this.telefoneProfessores = telefoneProfessores;
	}
	
	public int[] getMatricula() {
        return matriculaProfessores;
    }
    
    public String[] getNome() {
        return nomeProfessores;
    }
    
    public Date[] getAdmissao() {
       return admissaoProfessores; 
    }
    
    public String[] getEmail() {
        return emailProfessores;
    }
    
    public String[] getTelefone() {
        return telefoneProfessores;
    }
    
    public static void lerProfessor()throws IOException, ParseException {
		String dadosProfessores = "src/professores.txt";
        FileReader fileReader = new FileReader(dadosProfessores);
        Scanner input = new Scanner (fileReader);
        int listarProfessores= 0;
		
		while(input.hasNextLine()) {
            input.nextLine();
            listarProfessores++;
        }
		
        input.close();
        
        matriculaProfessores = new int[listarProfessores];
        nomeProfessores = new String[listarProfessores];
        admissaoProfessores = new Date[listarProfessores];
        emailProfessores = new String[listarProfessores];
        telefoneProfessores = new String[listarProfessores];
        
        fileReader = new FileReader (dadosProfessores);
        input = new Scanner(fileReader);
        input.useDelimiter(";|\r\n");
        
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        
        for (int i = 0; i < listarProfessores; i++) {
            int matricula = input.nextInt();
            String nome = input.next();
            Date admissaoProf = dateFormat.parse(input.next());
            String email = input.next();
            String telefone = input.next();
            
            matriculaProfessores[i]= matricula;
            nomeProfessores[i]= nome;
            admissaoProfessores[i]= admissaoProf;
            emailProfessores[i]= email;
            telefoneProfessores[i]= telefone;
        }
		
        input.close();
    }
}

13 Respostas

S

Pode mandar o erro?

P

staroski

Está dando erro pois você está fazendo new Coordenador() mas a classe Coordenador não possui um construtor sem parâmetros.

Entretanto você possui erros mais graves, você praticamente só está utilizando métodos e atributos estáticos, qual o motivo disso?

P

Opa, simplesmente não sabia que era um erro. Embasamento ruim… Culpa minha, vou reler e descobrir o por que de isso ser tão ruim. Pode-se dizer que está assim por conveniência, eu escrevi e “funcionou” kkk
Desculpe a ofensa a vista que pode ter acontecido kkkk e obrigado.

staroski

Não é exatamente um erro, mas considerando que você está trabalhando com herança, não faz sentido pois o que é estático pertence à classe e não aos objetos e não há herança nem polimorfismo de membros estáticos.

P

Staroski, mas aproveitando do seu envolvimento no tópico. Poderia me esclarecer mais sobre o erro? Eu tentei passar parâmetros no new Coordenador(), mas mesmo assim não funciona.

staroski

Qual o erro?
Não vi o código onde você tentou passar parâmetros.

P

Bom, pelo que eu entendi, você quando cria uma classe herdeira (subclasse), precisa fazer os construtores. Em ambas as classes. O construtor da minha classe Professor inclui as variáveis:

public static int[] matriculaProfessores;

public static String[] nomeProfessores;

public static Date[] admissaoProfessores;

public static String[] emailProfessores;

public static String[] telefoneProfessores;

que são valores obtidos através da leitura de arquivos txt que estão na pasta SRC do meu projeto.
Quando vou passar essas variáveis lá pro Coordenador, eu faço um construtor la também. Até aí beleza.
Crio o:

public Coordenador(int[] matriculaCoordenador, Date[] admissaoCoordenador,int[] matriculaProfessores, String[] nomeProfessores, Date[] admissaoProfessores, String[] emailProfessores, String[] telefoneProfessores){

super(matriculaProfessores,nomeProfessores,admissaoProfessores,emailProfessores,telefoneProfessores);

this.matriculaCoordenador= matriculaCoordenador;

this.admissaoCoordenador= admissaoCoordenador;

}

Agora daqui pra frente, estou travado. Quando quero chamar um método da classe Coordenador em uma outra classe, que não é nem Coordenador e nem Professor. Como faço?
Eu quero que meu método imprima as informações do coordenador + as informações do professor, conseguiu entender? kkk , Obrigado!!

staroski

Esses atributos não devem ser estáticos.
E creio que também não deveriam ser arrays, a menos que cada instância de professor tenha várias matrículas, vários nomes, várias datas de admissão…

P

E este o caso staroski, o static eu vou remover (obrigado!!), mas os dados dos professores são arrays pois possuo mais de 1 professor. São vario nomes, matriculas e etc.
Inclusive eu utilizei um método, que é o lerCoordenador() , para pegar os valores destas variáveis em um arquivo .txt saca?
Explicando o que quero fazer de forma bruta. Pegar valores armazenados em variáveis de outra classe, e exibir na classe Coordenador. Eu saberia fazer isso se não utilizasse outra classe e fosse tudo em uma só.
Tentei criar métodos getNome(){ return variável} e chamá-los na classe Coordenador, mas não deu.
Obrigado pelo envolvimento staroski.

staroski

Se você tem mais de um professor, então você terá mais objetos da classe Professor.
Cada instância tem seu próprio nome.

Lucas_Camara

Para trabalhar com vários professores, o correto é:

Classe Professor

public class Professor {
	private int matricula;
	private String nome;
	private Date admissao;
	private String email;
	private String telefone;
	
	// getters e setters
}

E, para o caso de ter vários professores, basta armazenar várias instâncias da classe Professor numa lista:

Professor p1 = // ... cria professor
Professor p2 = // ... cria professor
Professor p3 = // ... cria professor

List<Professor> professores = new ArrayList<Professor>();
professores.add(p1);
professores.add(p2);
professores.add(p3);
P

Galera, obrigado!
Na aula de hoje, pude tirar algumas dúvidas e entendi mais ou menos meu problema. Peguei em outros tópicos tbm uma dica boa. A apostila da Caelum. Comecei a ler aqui. Vlw Guys.
Acredito que este tópico não seja útil para outras pessoas pois fiz as perguntas erradas e enfim, talvez não agregue. Se quiserem apagar. =D

Criado 31 de maio de 2018
Ultima resposta 4 de jun. de 2018
Respostas 13
Participantes 4