1
resposta

[Dúvida] Métodos com nomes iguais

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()
    }
}
1 resposta

Sim, é isso mesmo. Porque o que define um método não é apenas seu nome, mas algo que chamamos de assinatura (nome + parâmetros + tipo de retorno). Basicamente se nós temos 3 tipos de funções diferentes todas com o mesmo nome da seguinte maneira:

//primeira função
fun foo(){
    //faz algo
}

//segunda função
fun foo( value: Int ){
    //faz algo
}

//terceira função
fun foo(val1: Int, val2: Int) : Int {
    //faz algo
}

As formas como serão chamadas irão referenciar automaticamente. O compilador é inteligente o suficiente para entender com o tipo de função você está trabalhando. Como o tipo de retorno, parâmetros variam de função para função nesse exemplo que eu dei, o compilador sabe que são funções diferentes por causa da sua assinatura.