Secondary constructors let you create extra ways to make objects with different starting information.
Secondary constructors in Kotlin
class ClassName { constructor(param1: Type1) { // initialization code } constructor(param1: Type1, param2: Type2) { // initialization code } }
Secondary constructors are inside the class body.
Each secondary constructor starts with the constructor keyword.
class Person { var name: String var age: Int constructor(name: String) { this.name = name this.age = 0 } constructor(name: String, age: Int) { this.name = name this.age = age } }
class Box { var width: Int var height: Int constructor(size: Int) { this.width = size this.height = size } constructor(width: Int, height: Int) { this.width = width this.height = height } }
This program shows two ways to create a Car object using secondary constructors. One sets a default year, the other sets a specific year.
class Car { var brand: String var year: Int constructor(brand: String) { this.brand = brand this.year = 2020 } constructor(brand: String, year: Int) { this.brand = brand this.year = year } } fun main() { val car1 = Car("Toyota") val car2 = Car("Honda", 2018) println("Car1: ${car1.brand}, Year: ${car1.year}") println("Car2: ${car2.brand}, Year: ${car2.year}") }
Secondary constructors can call the primary constructor using this() to avoid repeating code.
If a class has a primary constructor, secondary constructors must delegate to it either directly or indirectly.
Secondary constructors provide multiple ways to create objects with different inputs.
They help keep code clean by avoiding repeated initialization.
Use them when one constructor is not enough for your class needs.
Practice
secondary constructor in Kotlin?Solution
Step 1: Understand constructors in Kotlin
Kotlin classes can have a primary constructor and one or more secondary constructors to create objects.Step 2: Role of secondary constructors
Secondary constructors allow creating objects with different sets of parameters, providing flexibility.Final Answer:
To provide additional ways to create an object with different parameters -> Option CQuick Check:
Secondary constructors = multiple ways to create objects [OK]
- Thinking secondary constructors replace the primary constructor
- Confusing constructors with functions
- Assuming secondary constructors create static methods
Solution
Step 1: Recall Kotlin secondary constructor syntax
Secondary constructors use the keywordconstructorfollowed by parameters and a body.Step 2: Check each option
constructor(name: String) { this.name = name } uses correct syntax:constructor(name: String) { ... }. Others use invalid keywords.Final Answer:
constructor(name: String) { this.name = name } -> Option DQuick Check:
Keyword 'constructor' starts secondary constructors [OK]
- Adding 'fun' before constructor
- Using 'secondary' keyword
- Confusing with init blocks
class Person(val name: String) {
var age: Int = 0
constructor(name: String, age: Int) : this(name) {
this.age = age
}
}
fun main() {
val p = Person("Alice", 30)
println("Name: ${p.name}, Age: ${p.age}")
}Solution
Step 1: Understand constructor calls
The secondary constructor calls the primary constructor withthis(name), initializingname.Step 2: Assign age in secondary constructor
The secondary constructor setsthis.age = age, soagebecomes 30.Final Answer:
Name: Alice, Age: 30 -> Option BQuick Check:
Secondary constructor sets age correctly [OK]
- Assuming age stays 0
- Thinking name is empty
- Expecting compilation error
class Car(val model: String) {
constructor(model: String, year: Int) {
println("Year: $year")
}
}Solution
Step 1: Check secondary constructor rules
In Kotlin, a secondary constructor must delegate to the primary constructor using: this(...).Step 2: Analyze given code
The secondary constructor does not callthis(model), so it violates the rule.Final Answer:
Secondary constructor must call the primary constructor -> Option AQuick Check:
Secondary constructors require delegation [OK]
- Forgetting to delegate to primary constructor
- Trying to assign val property directly
- Thinking println is disallowed
Book with a primary constructor that takes title and a secondary constructor that also takes author. The secondary constructor should reuse the primary constructor and set author. Which code correctly implements this?Solution
Step 1: Check primary constructor and property initialization
class Book(val title: String) { var author: String = "Unknown" constructor(title: String, author: String) : this(title) { this.author = author } } defines primary constructor withtitleand a mutableauthorproperty with default value.Step 2: Verify secondary constructor delegates properly
The secondary constructor calls: this(title)to reuse primary constructor and setsauthorinside its body.Final Answer:
class Book(val title: String) { var author: String = "Unknown" constructor(title: String, author: String) : this(title) { this.author = author } } -> Option AQuick Check:
Secondary constructor delegates and sets extra property [OK]
- Not delegating secondary constructor to primary
- Trying to assign val properties
- Missing property initialization
Ready to prove it?
Pass the test and this pattern moves unknown
