Para que serve o construtor secundário se eu posso customizar o construtor primário?
Para que serve o construtor secundário se eu posso customizar o construtor primário?
Oi Diego, tudo tranquilo?
Os construtores secundários serão úteis caso precisemos adicionar mais lógica na inicialização da classe. Eles são bem parecidos com os construtores do Java, a diferença é que quando implementamos esses construtores secundários ao mesmo tempo que um construtor primário, precisamos fazer com que todos os secundários chamem o primário (através da palavra-chave this()
) para garantir que as properties passadas como parâmetro das secundárias sejam sempre inicializadas pelo construtor primário. A motivação para isso é que o tanto o bloco init
quanto os inicializadores das propriedades dependem das properties passadas para o construtor primário para que o objeto seja construído corretamente.
Usando como exemplo esse post do Stack Overflow:
class Rectangle(val width: Int, val height: Int) {
constructor(size: Int) : this(size, size)
val area = width * height
init {
println("New rectangle, $width x $height")
}
}
Aqui temos o construtor secundário que recebe apenas um parâmetro size: Int
. Mas perceba que tanto o bloco init
como o inicializador val area
precisam de dois parâmetros para construir o objeto corretamente, para resolver isso precisamos garantir que quando o secundário for invocado, ele chame o primário para que todos os parâmetros necessários sejam inicializados corretamente.
Espero ter ajudado, se ficou qualquer dúvida é só avisar!
Bons estudos!!