Matheus, no java tudo é muito especifico, quando você declara um metodo, logo após o public você define o tipo do retorno:
public double getBonificacao() {
//SEU CODIGO
}
Este double se refere ao tipo de dado que ele vai retornar, ou seja, após executar o metodo getBonificacao, ele exige um valor para que ele possa devolver ou como diz na linguagem "retornar".
No caso você fez condicionais checando pelo parametro tipo
private int tipo = 0; //0-comum 1-Gerente 2-Diretor
Se for do tipo 0, RETORNA o salário * 0.01 (10%), se for do tipo 1 RETORNA o salário * 0.5 (meio salario) e dai por diante, ou seja, seu metodo retorna algo.
Um metodo setter por exemplo para mudar o tipo do funcionario, não haveria a necessidade de ter um retorno pois o comando seria apenas atribuição de um parametro, então ao em vez de ter retorno double como o getBonificacao ele não teria retorno nenhum ou retorno vazio (void).
public void setTipo(int tipo) {
this.tipo = tipo;
}
Aonde quero chegar? O java as coisas são muito especificas, se você declarou que vai ter um retorno de um numero do tipo double, você tem que ter um retorno do tipo double, se você não quiser ter nenhum retorno deve especificar o tipo de retorno void (void é uma palavra em inglês que significa vazio). Como no metodo getBonificacao você declara o tipo de retorno double, o java espera que ao executar este metodo, tenha algum retorno double, se você retira aquela ultima linha, a exceção final do seu código não teria nenhum retorno quando o java espera um retorno double por isso o seu código acaba não compilando.
Para ficar mais claro, o seu código se comporta dessa forma só que da forma que você escreveu fica implicito:
public double getBonificacao() { //Comum
if(this.tipo == 0) {
return this.salario * 0.1;
}
else if(this.tipo == 1) {
return this.salario * 0.5;
}
else if(this.tipo == 2) {
return this.salario * 0.75;
}
else if(this.tipo == 3) {
return this.salario+1000.00;
}
else {
return this.salario;
}
}
Se for do tipo 0, e se for do tipo 1 retorna valor e se for do tipo 2 retorna valor e se for do tipo 3 retorna valor se não for nada disso, retorna o proprio salario, se você tira o return this.salario ali do else um metodo que exige um retorno de um tipo double não teria nenhum retorno causando o erro no compilador.
Espero que tenha ajudado.