Erro

2 respostas
D

Estou trombando com o seguinte erro:

The method logar(Funcionario) is undefined for the type Funcionario

Como posso corrigir esse erro?

Funcionario

public abstract class Funcionario {

	public abstract void trabalhar();
	
}

Engenheiro

public class Engenheiro extends Funcionario {

	public void trabalhar() {
		System.out.println("Engenheiro trabalhando");
	}
}

Motorista

public class Motorista extends Funcionario {

	public void trabalhar() {
		System.out.println("Motorista trabalhando");
	}
}

Autentica

interface Autentica {

	public void logar(Funcionario f);
	
}

Gerente

public class Gerente extends Funcionario implements Autentica {

	public void trabalhar() {
		System.out.println("Gerente trabalhando");
	}

	public void logar(Funcionario f) {
		if(f instanceof Gerente){
			System.out.println("Gerente logando");
		}
	}
}

Principal

public class Principal {

	public static void main(String[] args) {

		Funcionario f = new Engenheiro();
		f.trabalhar();
		
		f = new Motorista();
		f.trabalhar();
		
		f = new Gerente();
		f.trabalhar();
		f.logar(f);
		
	}
}

2 Respostas

BrunoBastosPJ

Sua referência é do tipo funcionário, e sua classe funcionário não conhece este método logar. Mesmo que seu objeto seja um gerente, que implementa este método, sua referência funcionario não vai conhecer este método…

Note que você está extendendo uma classe e implementando uma interface na sua classe gerente, então você não vai conseguir trabalhar com uma instância de um nível acima que conheça ambos os métodos, porque só quem conhece o método trabalhar são subclasses de Funcionario e só quem conhece o método logar são classes que implementam Autentica.

Para fazer as duas chamadas de métodos seguidas igual você está tentando vazer sua instância tem que ser do tipo Gerente, ai você não terá nenhum problema.

Gerente g = new Gerente();
g.trabalhar();
g.logar(g); // note que aqui você pode passar g, já que Gerente é uma subclasse de Funcionario

Beleza problema resolvido, mas vamos dar uma olhada no seu código…
Existe a necessidade deste método logar receber um objeto Funcionario? A não ser que seu programa vá crescer mais não vejo a necessidade. O ideal seria apenas uma chamada a logar() e a classe que estiver implementando este método faz o tratamento correto.

S

isso ai que o Bruno falou
ou colocar o logar no Funcionário

Criado 8 de julho de 2008
Ultima resposta 9 de jul. de 2008
Respostas 2
Participantes 3