An extension property allows you to add a new property to an existing class without modifying its source code. It behaves like a regular property but is defined outside the class.
Click to reveal answer
intermediate
Can extension properties have backing fields in Kotlin?
No, extension properties cannot have backing fields. They must be defined with a getter (and optionally a setter) that computes the value.
Click to reveal answer
beginner
How do you define a read-only extension property for the String class that returns the first character?
You define it like this:
val String.firstChar: Char get() = this[0]
Click to reveal answer
intermediate
Why can't extension properties access private members of the class they extend?
Because extension properties are defined outside the class, they do not have access to the class's private members. They only use the public API.
Click to reveal answer
intermediate
What happens if you define an extension property with the same name as a member property?
The member property always takes precedence. The extension property will be ignored when accessed through an instance of the class.
Click to reveal answer
Which of the following is true about Kotlin extension properties?
AThey can have backing fields.
BThey can only have getters and setters without backing fields.
CThey can modify private members of the class.
DThey require modifying the original class source code.
✗ Incorrect
Extension properties cannot have backing fields; they must use getters and setters that compute values.
How do you declare a read-only extension property named 'lastChar' for String?
Afun String.lastChar() = this.last()
Bval lastChar: String get() = this.last()
Cvar String.lastChar: Char = this.last()
Dval String.lastChar: Char get() = this.last()
✗ Incorrect
Extension properties must specify the receiver type before the property name.
If a class has a member property 'size' and you define an extension property 'size', which one is used when accessing 'size' on an instance?
AThe member property
BThe extension property
CBoth are used alternately
DIt causes a compile error
✗ Incorrect
Member properties always take precedence over extension properties with the same name.
Can extension properties access private properties of the class they extend?
ANo, they cannot access private members
BOnly if declared in the same package
COnly if the class is open
DYes, always
✗ Incorrect
Extension properties are defined outside the class and cannot access private members.
What is the main benefit of using extension properties?
ATo access private members of a class
BTo override existing properties
CTo add new properties without changing the original class
DTo create new classes
✗ Incorrect
Extension properties let you add new properties to classes without modifying their source code.
Explain what extension properties are in Kotlin and how they differ from regular properties.
Think about how you add new properties without changing the original class.
You got /4 concepts.
Describe the limitations of extension properties in Kotlin.
Consider what extension properties cannot do compared to regular properties.
You got /4 concepts.
Practice
(1/5)
1. What is an extension property in Kotlin?
easy
A. A property that replaces an existing property in a class
B. A property that stores data inside the original class
C. A property that can only be used inside the class it is declared
D. A property added to an existing class without modifying its source code
Solution
Step 1: Understand extension properties concept
Extension properties allow adding new properties to classes without changing their original code.
Step 2: Identify correct description
"A property added to an existing class without modifying its source code" correctly describes this as adding properties externally without modifying the class.
Final Answer:
A property added to an existing class without modifying its source code -> Option D
Quick Check:
Extension property = added externally [OK]
Hint: Extension properties add features without changing original class [OK]
Common Mistakes:
Thinking extension properties store data inside the class
Confusing extension properties with member properties
Believing extension properties can replace existing ones
2. Which of the following is the correct syntax to declare an extension property isEven for Int in Kotlin?
easy
A. fun Int.isEven() = this % 2 == 0
B. val Int.isEven get() = this % 2 == 0
C. var Int.isEven = this % 2 == 0
D. val isEven: Int get() = this % 2 == 0
Solution
Step 1: Recall extension property syntax
Extension properties use val/var Type.propertyName get() = ... without a body for setter if read-only.
Step 2: Check options
val Int.isEven get() = this % 2 == 0 correctly uses val Int.isEven get() = this % 2 == 0. var Int.isEven = this % 2 == 0 wrongly uses var without setter. fun Int.isEven() = this % 2 == 0 is a function, not a property. val isEven: Int get() = this % 2 == 0 misses receiver type.
Final Answer:
val Int.isEven get() = this % 2 == 0 -> Option B
Quick Check:
Extension property syntax = val Type.prop get() [OK]
Hint: Extension properties need a getter, no setter if val [OK]
Common Mistakes:
Using var without setter for extension property
Writing extension property as a function
Omitting receiver type before property name
3. What will be the output of this Kotlin code?
val String.firstChar: Char
get() = this[0]
fun main() {
val word = "hello"
println(word.firstChar)
}
medium
A. firstChar
B. hello
C. h
D. Compilation error
Solution
Step 1: Understand extension property behavior
The extension property firstChar returns the first character of the string using this[0].
Step 2: Trace the code output
For word = "hello", word.firstChar returns 'h', which is printed.
Final Answer:
h -> Option C
Quick Check:
Extension property returns first char = h [OK]
Hint: Extension property uses receiver object like member [OK]
Common Mistakes:
Expecting full string instead of first character
Confusing property with function call
Thinking extension properties cause errors
4. Identify the error in this Kotlin extension property declaration:
var String.lastChar: Char
get() = this[length - 1]
set(value) { this[length - 1] = value }
medium
A. You cannot assign to a character in a String
B. The getter syntax is incorrect
C. Extension properties cannot have setters
D. The property must be declared inside the class
Solution
Step 1: Review extension property setter rules
Extension properties can have setters, but they cannot modify the original object if it is immutable.
Step 2: Check String mutability
Strings in Kotlin are immutable; you cannot assign to this[length - 1]. This causes a compilation error.
Final Answer:
You cannot assign to a character in a String -> Option A
Quick Check:
Strings immutable = cannot set chars [OK]
Hint: Strings are immutable; extension setters can't modify them [OK]
Common Mistakes:
Assuming extension properties can store data
Thinking extension setters always cause errors
Confusing syntax errors with immutability issues
5. You want to add an extension property isAdult to the Person class that returns true if age is 18 or more, otherwise false. Given data class Person(val name: String, val age: Int), which is the correct extension property implementation?
hard
A. val Person.isAdult get() = age >= 18
B. var Person.isAdult get() = age >= 18; set(value) { age = if(value) 18 else 0 }
C. fun Person.isAdult() = age >= 18
D. val isAdult: Person get() = age >= 18
Solution
Step 1: Define read-only extension property
Since age is a val, we can only create a read-only extension property with a getter.
Step 2: Check options for correct syntax and logic
val Person.isAdult get() = age >= 18 correctly defines val Person.isAdult get() = age >= 18. var Person.isAdult get() = age >= 18; set(value) { age = if(value) 18 else 0 } tries to set age which is immutable. fun Person.isAdult() = age >= 18 is a function, not a property. val isAdult: Person get() = age >= 18 has wrong syntax and receiver placement.
Final Answer:
val Person.isAdult get() = age >= 18 -> Option A
Quick Check:
Read-only extension property with getter = val Person.isAdult get() = age >= 18 [OK]
Hint: Use val with getter for read-only extension properties [OK]
Common Mistakes:
Trying to create setter for immutable property
Confusing extension property with extension function
Incorrect syntax for receiver type in property
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.