Kotlin Sealed Classes
Kotlin Sealed Classes (Deep Explanation)
Sealed classes in Kotlin are used to represent restricted class hierarchies.
They are extremely powerful for state handling, result modeling, and safe polymorphism, especially in Android, backend APIs, and clean architecture.
👉 Think of sealed classes as “controlled inheritance”
1. What is a Sealed Class?
A sealed class:
Has a fixed set of subclasses
All subclasses are known at compile time
Subclasses must be in the same file
2. Why Use Sealed Classes?
Problems with normal inheritance:
Anyone can extend the class
whenneedselse
Sealed classes solve this:
✅ No unknown subclasses
✅ Exhaustive
when(noelse)✅ Safer state handling
3. Basic Sealed Class Example
Usage:
✅ No else required
4. Object vs Data Class in Sealed Classes
Use:
object→ no data (singleton)data class→ holds data
5. Sealed Class vs Enum (Very Important)
| Feature | Sealed Class | Enum |
|---|---|---|
| Can hold data | ✅ Yes | ❌ No |
| Multiple instances | ✅ Yes | ❌ No |
| Inheritance | ✅ Yes | ❌ No |
| Best for | State & Results | Fixed constants |
👉 Enums are limited, sealed classes are powerful
6. Sealed Classes with when (Exhaustiveness)
✔ Compiler forces handling all cases
✔ Safer than if-else
7. Sealed Class + Inheritance Rules
Rules:
Subclasses must be in same file
Can be
class,data class, orobjectCan have constructors & properties
8. Sealed Class with Abstract Members
9. Sealed Interfaces (Kotlin 1.5+)
Difference:
Interfaces allow multiple inheritance
Classes do not
10. Real Android MVVM Example (Very Common)
ViewModel:
UI:
11. Sealed Class + Coroutines + Flow
12. Common Mistakes
❌ Using enum instead of sealed class for state
❌ Adding unnecessary else in when
❌ Creating sealed subclasses in different files
❌ Overusing sealed classes everywhere
13. When to Use Sealed Classes?
✅ UI State
✅ API Result
✅ Navigation Events
✅ Error Modeling
✅ Domain Result Types
❌ Simple constants → use enum
❌ Single value → use object
14. Sealed Class vs Abstract Class
| Feature | Sealed | Abstract |
|---|---|---|
| Subclass control | ✅ Yes | ❌ No |
Exhaustive when | ✅ Yes | ❌ No |
| Extension allowed | Restricted | Open |
Final Summary
Sealed classes = safe, controlled inheritance
Best for state & result modeling
Eliminates runtime errors
Compiler-enforced correctness
Essential for modern Kotlin & Android
