Aqui vamos montar um exemplo de classes abstratas para que possamos sempre recorrer a esse exemplo no caso dúvida quanto sua aplicação.
Então vamos criar uma classe abstrata Funcionario e nela os métodos getter para Bonus e um setter de salario. Porém, como nós queremos apenas usar o bônus para uma determinada função (cargo), iremos chamar nosso método getBonus() também de abstrato apenas com a sua assinatura do método, sem que ele retorne nenhum parâmetro.
Já nas classes como no exemplo que criamos class Gerente e class Desenvolvedor que herdam da classe Funcionario, afinal, todo Gerente é um funcionário assim como todo Desenvolvedor também é um funcionário, usaremos o extends para a classe e o protected para que eu possa usar o atributo da classe que estou herdando.
Bônus para Funcionário Desenvolvedor: 25%
Bônus para Funcionário Gerente: 30%
Também podemos gerar uma classe TotalizadorDeBonus para visualizar o total de Bônus dado para os Funcionários.
Agora que todas as classes foram geradas já podemos testar no código com nossa classe main TestaFuncionario.