Método "super" não funcionando [RESOLVIDO]

4 respostas
M

Boa noite, estou com esta dúvida:

Classe Funcionario:
public class Funcionario {
  protected String nome;
  protected double salario;
  protected static double contador = 0;
  
  
  public Funcionario () {
	contador++;
	System.out.println("Funcionario contratado de numero: " + contador);
  }
  public String getInfo() {
	  return "Nome: " + this.nome + " e o seu salário é de: " + this.salario;
  }
  public double getGastos() {
	  return getSalario();
  }
  public void setNome(String nome) {
	this.nome = nome;
  }
  public String getNome() {
	return nome;
  }
  public void setSalario(double salario) {
	this.salario = salario;
  }
  public double getSalario() {
	return salario;
  }
  public double getBonificacao() {
	  return this.salario += salario * 0.10;
  }
  public static void mostra () {
	  System.out.println("Funcionarios contratados: " + contador++);
  }
  
}
Class Gerente:
public class Gerente extends Funcionario {
  
	private int senha;
	
	public void mudaSenha (int senha) {
		this.senha = senha;
	}
	public void validaSenha (int senha) {
		if (this.senha == senha) {
			System.out.println("OK! SENHA CORRETA!");
		} else {
			System.out.println("NO! SENHA INVALIDA!");
		}
	}
	public int getSenha() {
		return senha;
	}
	public double getBonificacao() {
		
		return super.getBonificacao() + 500;
	}
}
Classe GeradorDeRelatorio:
public class GeradorDeRelatorio {
  protected int geradorDeRelatorio = 0;
  
  public void adiciona (Funcionario f) {
	  System.out.println(f.getInfo());
	  System.out.println(f.getGastos());
  }
}
Classe TestaTudo:
public class TestaTudo {
  private static double bonificacao;

public static void main(String[] args) {
	  GeradorDeRelatorio g = new GeradorDeRelatorio();
	  
	  Funcionario marcos = new Funcionario ();
	  marcos.setNome("Marcos");
	  marcos.setSalario(1000);
	  marcos.getBonificacao();
	  g.adiciona(marcos);
	  
	  System.out.println();
	  
	  Gerente helena = new Gerente ();
	  helena.setNome("Helena");
	  helena.setSalario(2000);
	  helena.getBonificacao();
	  helena.mudaSenha(123);
	  helena.validaSenha(123);
	  g.adiciona(helena);
	  
	  Funcionario.mostra();
  }
}
Resultado:
Funcionario contratado de numero: 1.0
Nome: Marcos e o seu salário é de: 1100.0
1100.0

Funcionario contratado de numero: 2.0
OK! SENHA CORRETA!
Nome: Helena e o seu salário é de: 2200.0
2200.0
Funcionarios contratados: 2.0

Não sei o que falta, segui o exemplo da apostila.

Grato.

4 Respostas

ViniGodoy

E qual é a dúvida?

M

O resultado para salario de gerente após bonificação não era para ser 2700 ?

ViniGodoy

A implementação desses métodos está estranha. Tem certeza que você copiou corretamente da apostila? O método getBonificacao deveria retornar só o valor da bonificação, sem alterar o salário. Normalmente, não esperamos que o métodos get alterem coisas.

Na classe de cima, ele deveria ser:

public double getBonificacao() { return salario * 0.10; }

E na classe debaixo (Gerente):

public double getBonificacao() { return super.getBonificacao() + 500; }

Para imprimir o salário somado a bonificação, você deveria fazer:

System.out.println(f.getSalario() + f.getBonificacao());

Note que na classe gerente, do jeito que está, chamar o getBonificacao() irá somar 10% ao salário. Então, ele irá executar o método debaixo, que retorna o salário multiplicado + 500, mas sem somar esses 500 ao salário.

M

haaaa :facepalm:

Obrigado, entendi, agora terei que fazer algumas alterações na super classe.

Criado 16 de março de 2011
Ultima resposta 16 de mar. de 2011
Respostas 4
Participantes 2