Não ficou muito claro para mim o porque eu posso ter métodos com o mesmo nome. Só pelos parâmetros serem diferentes isso já torna possível? Ficou um pouco confuso.
class CalculadoraBonificacao {
var total: Double = 0.0
private set //pode ser lido, mas não modificado fora da classe
fun registra(funcionario: Funcionario){
this.total += funcionario.bonificacao()
}
fun registra(gerente: Gerente){
this.total += gerente.bonificacao()
}
fun registra(diretor: Diretor){
this.total += diretor.bonificacao()
}
}