Secondary constructor digunakan ketika kita ingin menginisialisasi sebuah kelas dengan cara yang lain. Anda dapat membuat lebih dari satu secondary constructor. Sebagai contoh, kita bisa menambahkan secondary constructor pada kelas Animal:

1. class Animal(name: String, weight: Double, age: Int) { 2.     val name: String 3.     val weight: Double 4.     val age: Int 5.     var isMammal: Boolean 6.   7.     init { 8.         this.weight = if(weight < 0) 0.1 else weight 9.         this.age = if(age < 0) 0  else age 10.         this.name = name 11.         this.isMammal = false 12.     } 13.   14.     constructor(name: String, weight: Double, age: Int, isMammal: Boolean) : this(name, weight, age) { 15.         this.isMammal = isMammal 16.     } 17. } 18.   19. fun main() { 20.     val dicodingCat = Animal("Dicoding Miaw", 2.5, 2, true) 21.     println("Nama: ${dicodingCat.name}, Berat: ${dicodingCat.weight}, Umur: ${dicodingCat.age}, mamalia: ${dicodingCat.isMammal}") 22.   23.     val dicodingBird = Animal("Dicoding tweet", 0.5, 1) 24.     println("Nama: ${dicodingBird.name}, Berat: ${dicodingBird.weight}, Umur: ${dicodingBird.age}, mamalia: ${dicodingBird.isMammal}") 25. } 26.   27. /* 28. output: 29.     Nama: Dicoding Miaw, Berat: 2.5, Umur: 2, mamalia: true 30.     Nama: Dicoding tweet, Berat: 0.5, Umur: 1, mamalia: false 31. */

Dengan begitu, objek Animal dapat diinisialisasi dengan secondary constructor ketika nilai name, weight, age dan isMammal tersedia. Tetapi jika nilai isMammal tidak tersedia,  primary constructor lah yang akan digunakan dan nilai isMammal dapat diinisialisasi pada blok init dengan nilai default, yaitu false.

Default Constructor

Kotlin secara otomatis membuat sebuah default constructor pada kelas jika kita tidak membuat sebuah konstruktor secara manual. Perhatikan kode berikut:

1. class Animal{ 2.     val name: String = "Dicoding Miaw" 3.     val weight: Double = 4.2 4.     val age: Int = 2 5.     val isMammal: Boolean = true 6. } 7.   8. fun main(){ 9.     val dicodingCat = Animal() 10.     println("Nama: ${dicodingCat.name}, Berat: ${dicodingCat.weight}, Umur: ${dicodingCat.age}, mamalia: ${dicodingCat.isMammal}" ) 11. } 12.   13. /* 14. output: 15.     Nama: Dicoding Miaw, Berat: 4.2, Umur: 2, mamalia: true 16. */

Ketika kita membuat sebuah objek, default konstruktor akan dipanggil. Konstruktor tersebut akan menginisialisasi properti yang terdapat pada kelas dengan nilai default.