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

Boa noite, estou com esta dúvida:

Classe Funcionario:

[code]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++);
}

}[/code]

Class Gerente:

[code]
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;
}

}[/code]

Classe GeradorDeRelatorio:

[code]public class GeradorDeRelatorio {
protected int geradorDeRelatorio = 0;

public void adiciona (Funcionario f) {
System.out.println(f.getInfo());
System.out.println(f.getGastos());
}
}[/code]

Classe TestaTudo:

[code]
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();

}
}[/code]

Resultado:

[code]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[/code]

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

Grato.

E qual é a dúvida?

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

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.

haaaa :facepalm:

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