CodeBlanks Logo Icon CodeBlanks

Polymorphism

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

Main.kt
// Polymorphic serialization
// write here
import kotlinx.serialization.Serializable

fun main() {
    
}

Sample solution

Main.kt
@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

Question
@Serializable
____ class Shape
Answer
@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

All lessons in Advanced