Polymorphism
- Kotlin course
- Advanced
- Lesson 29/83
- 5 min
Learn polymorphic serialization.
Polymorphic serialization
Polymorphic serialization turns different subclasses of a sealed class or interface into JSON. Each subclass is written with a type tag.
Example: @Serializable sealed class Shape. Subclasses @Serializable data class Circle(val radius: Double) : Shape() and @Serializable data class Square(val side: Double) : Shape(). In JSON it carries type info as {"type":"Circle","radius":5.0}. This is used to serialize different shapes in one list at once.
Polymorphism with sealed classes
A sealed class has subclasses known at compile time. It is ideal for polymorphic serialization.
Example: @Serializable sealed class Message. Subclasses: @Serializable data class TextMessage(val text: String) : Message() and @Serializable data class ImageMessage(val url: String) : Message(). A List<Message> holds both text and image messages. In JSON each element declares its subclass with a type field. This is useful in messaging apps.
Practice Define a sealed class Shape
Define @Serializable sealed class Shape. Add a subclass @Serializable data class Circle(val radius: Double) : Shape(). Inside main, print println("Shape ready").
Starter code
// Polymorphic serialization
// write here
import kotlinx.serialization.Serializable
fun main() {
}Sample solution
@Serializable
sealed class Shape
@Serializable
data class Circle(val radius: Double) : Shape()
fun main() {
println("Shape ready")
}Expected output
Shape ready
Questions and answers
Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.
1 Complete the sealed class definition
@Serializable
____ class Shape
@Serializable
sealed class Shape
Explanation: A sealed class enables polymorphic serialization.
2 What is polymorphic serialization used for?
- To serialize subclasses with a type tag Correct answer
- To prettyPrint JSON
- To compress JSON
- For thread safe serialization
Explanation: Polymorphic serialization writes subclasses with a type tag.
3 Match polymorphism parts
| Term | Meaning |
|---|---|
sealed class |
Parent class |
data class |
Subclass |
type |
Type tag |
@Serializable |
Marker |