Sobrescrita e Sobrecarga
Observação: O arquivo utilizado neste conteúdo que fala sobre sobrescrita e sobrecarga é o 11-sobrescrita-sobrecarga.kt.
Vamos nessa?
O que é Sobrescrita
Como o próprio nome já nos diz, é o ato de sobrescrever algo, passar a limpo, escrever por cima, substituir algo que já foi escrito.
Com isso já podemos ter uma ideia, de que talvez o Kotlin seja capaz de modificar um método herdado da classe PAI, correto?
Na mosca!
Observe abaixo uma classe PAI chamada MinhaClasseDois, que possui um método do tipo 'open', que significa que ele poderá ser sobrescrito quando herdado por uma classe FILHO:
open class MinhaClasseDois(){
open fun mostrarMensagem(){//Como iremos modificar essa função na classe FILHO, ela precisa ser do tipo open, para que possamos fazer o override.
println("Está é a minha classe [MinhaClasseDois]")
}
}
Observação: Sem o 'open' declarado antes do método, não conseguimos sobrescreve-lo mais tarde na classe FILHO, pois o compilador irá gerar um erro.
Já na classe FILHO, nós podemos fazer duas coisas:
Alternativa Um) Herdar normalmente e usar o método 'mostraMensagem', que no caso mostraria a mensagem padrão herdada da classe PAI: "Está é a minha classe [MinhaClasseDois]":
class MinhaClasseFilhoUm(): MinhaClasseDois(){
}
Alternativa Dois) Sobrescrever esse método (pois ele nos permite), de modo a alterar a mensagem, vejamos:
class MinhaClasseFilhoDois(): MinhaClasseDois(){
override fun mostrarMensagem(){//Aqui nós estamos modificando a função herdada pelo pai, usando o override
println("Está é a minha classe [MinhaClasseFilhoDois]")//Quando a intancia da classe filho chamar 'mostraMensagemele vai mostrar essa mensagem em vez da antiga herdada pela classe PAI.
super.mostrarMensagem()//Este comando é opcinal, e é usado caso queiramos chamar o método da classe pai, e para fazer isso é só utilizar o super.
//No caso do comando 'super.mostrarMensagemdeclarado acima, ele vai chamar o método herdado da classe pai de modo a mostrar a mensagem: "Está é a minha classe [MinhaClasseDois]"
}
}
Observe que para sobrescrever o método usamos o override atrelado a declaração da função.
O que é Sobrecarga?
Como o próprio nome já nós diz, é quando excedemos a carga normal, quando sobrecarregamos alguém a ponto de atribuir muitas tarefas a ele.
Esse conceito já foi visto em conteúdos anteriores, e é quando temos diversos métodos com o mesmo nome, mas que recebem parâmetros diferentes, exemplo:
class MinhaClasseOverload(){
fun salvar(){}
fun salvar(a: Int){}
fun salvar(a: Int, b: Int){}
fun salvar(a: Float){}
fun salvar(a: Double){}
}
No caso da classe acima, nós podemos chamar o método salvar de diversas formas diferentes.
Conclusão
Neste conteúdo você aprendeu um pouco mais sobre como sobrescrever métodos, e como fazer sobrecarga dos mesmos.
Até o próximo conteúdo 😄