A sealed class is a special kind of class that restricts which classes can inherit from it. It helps represent restricted class hierarchies, making code safer and easier to understand.
Click to reveal answer
intermediate
Why use sealed classes instead of enums?
Sealed classes can hold state and have multiple properties, unlike enums which are limited to fixed constants. Sealed classes allow more complex data and behavior.
Click to reveal answer
beginner
How do you declare a sealed class in Kotlin?
Use the keyword <code>sealed</code> before <code>class</code>. For example: <br><code>sealed class Result</code>
Click to reveal answer
intermediate
Can sealed classes have subclasses outside their file?
No. All subclasses of a sealed class must be declared in the same file. This restriction helps the compiler know all possible subclasses.
Click to reveal answer
intermediate
How does a sealed class improve <code>when</code> expressions?
When you use a sealed class in a <code>when</code> expression, the compiler knows all subclasses and can enforce that all cases are handled, making the code safer.
Click to reveal answer
What keyword do you use to declare a sealed class in Kotlin?
Asealed
Bopen
Cabstract
Dfinal
✗ Incorrect
The keyword sealed declares a sealed class.
Where must subclasses of a sealed class be declared?
AIn a different module
BAnywhere in the project
CIn a different package
DIn the same file as the sealed class
✗ Incorrect
All subclasses must be declared in the same file to keep the hierarchy closed.
Which of these is a benefit of using sealed classes?
ACompiler enforces exhaustive when expressions
BAllows subclasses anywhere
CCan be instantiated directly
DNo restrictions on inheritance
✗ Incorrect
Sealed classes help the compiler check that all cases are handled in when expressions.
Can sealed classes hold state or properties?
ANo, they are like enums with fixed constants
BOnly if marked abstract
CYes, they can have properties and state
DOnly if subclasses are data classes
✗ Incorrect
Sealed classes can have properties and hold state, unlike enums.
Which of these is NOT true about sealed classes?
AThey restrict subclassing to the same file
BThey allow unlimited subclassing anywhere
CThey improve safety in when expressions
DThey can be used to represent restricted hierarchies
✗ Incorrect
Sealed classes do NOT allow unlimited subclassing; subclasses must be in the same file.
Explain what a sealed class is and why it is useful in Kotlin.
Think about how sealed classes help the compiler know all possible subclasses.
You got /3 concepts.
Describe how sealed classes improve the use of when expressions in Kotlin.
Consider what happens if you forget to handle a subclass in a when expression.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of a sealed class in Kotlin?
easy
A. To replace interfaces completely
B. To allow unlimited subclassing from any package
C. To create anonymous classes only
D. To restrict class inheritance to a fixed set of subclasses
Solution
Step 1: Understand sealed class inheritance
A sealed class restricts which classes can inherit from it, limiting subclasses to those defined in the same file.
Step 2: Compare with other class types
Unlike open classes, sealed classes do not allow unlimited subclassing, ensuring all subclasses are known at compile time.
Final Answer:
To restrict class inheritance to a fixed set of subclasses -> Option D
Quick Check:
Sealed class = fixed subclass set [OK]
Hint: Sealed classes limit subclasses to known types only [OK]
Common Mistakes:
Thinking sealed classes allow any subclass anywhere
Confusing sealed classes with abstract classes
Assuming sealed classes create anonymous classes
2. Which of the following is the correct syntax to declare a sealed class named Result in Kotlin?
easy
A. sealed Result class {}
B. sealed class Result {}
C. class sealed Result {}
D. sealed interface Result {}
Solution
Step 1: Recall sealed class declaration syntax
The keyword sealed precedes class followed by the class name and braces.
Step 2: Check each option
sealed class Result {} matches the correct syntax. Options B and C have wrong keyword order. sealed interface Result {} declares a sealed interface, not a sealed class.
Final Answer:
sealed class Result {} -> Option B
Quick Check:
sealed class syntax = "sealed class Name {}" [OK]
Hint: sealed class always starts with 'sealed class' keywords [OK]
Common Mistakes:
Swapping 'sealed' and 'class' keywords
Using 'sealed interface' instead of 'sealed class'
Omitting braces after class name
3. Given the sealed class and when expression below, what will be printed?
sealed class Response {
object Success : Response()
object Error : Response()
}
fun handle(response: Response) {
when(response) {
is Response.Success -> println("Success")
is Response.Error -> println("Error")
}
}
handle(Response.Success)
medium
A. Nothing is printed
B. Error
C. Success
D. Compile-time error
Solution
Step 1: Identify the passed object type
The function is called with Response.Success, which matches the first when branch.
Step 2: Check the when branches
The when expression prints "Success" for Response.Success and "Error" for Response.Error.
Final Answer:
Success -> Option C
Quick Check:
Response.Success triggers "Success" print [OK]
Hint: Match sealed subclasses exactly in when to get correct output [OK]
Common Mistakes:
Confusing Success and Error outputs
Forgetting to call the function with correct subclass
Expecting compile error due to sealed class
4. What is wrong with this sealed class declaration?
sealed class State {}
class Loading : State()
class Success : State()
class Error : State()
medium
A. Subclasses must be declared inside the sealed class file
B. Sealed classes cannot have subclasses
C. Subclasses must be objects, not classes
D. Sealed class must be abstract
Solution
Step 1: Recall sealed class subclass rules
All subclasses of a sealed class must be declared in the same file as the sealed class.
Step 2: Analyze the code snippet
The subclasses Loading, Success, Error are declared separately after the sealed class. This violates the rule because direct subclasses of a sealed class must be declared in the same file as the sealed class.
Final Answer:
Subclasses must be declared inside the sealed class file -> Option A
Quick Check:
Sealed subclasses must be in same file [OK]
Hint: Keep all sealed subclasses in the same file [OK]
Common Mistakes:
Declaring subclasses in different files
Thinking sealed classes cannot have subclasses
Confusing sealed classes with abstract classes
5. You want to represent a network request state with a sealed class NetworkState having Loading, Success with data, and Error with message. Which is the best way to define Success and Error subclasses?
hard
A. Use data classes with properties inside the sealed class
B. Use object declarations for all subclasses
C. Use abstract classes for Success and Error
D. Use interfaces for Success and Error
Solution
Step 1: Understand subclass data needs
Success needs to hold data, and Error needs to hold a message, so they require properties.
Step 2: Choose subclass type
Data classes are ideal for subclasses with properties because they provide equals, hashCode, and toString automatically.
Final Answer:
Use data classes with properties inside the sealed class -> Option A
Quick Check:
Data classes hold data in sealed subclasses [OK]
Hint: Use data classes for sealed subclasses with data [OK]
Common Mistakes:
Using object for subclasses needing data
Using abstract classes unnecessarily
Using interfaces instead of sealed subclasses
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.