-
Notifications
You must be signed in to change notification settings - Fork 24
About sealed class in android
Devrath edited this page Aug 9, 2022
·
15 revisions
There are only abstract methods defined and concrete implementations are defined.
sealed class Animal {
object Cat : Animal() // We can define a Object classes like this
data class Dog(val name: String) : Animal() // We can define data classes like this
}- Here you can observe that we are inheriting
AnimalforCamelandMonkeybut it's defined in the same file. If we try to inherit in another file, it will not work. - What the
sealedmodifierdoes is, that it is impossible to define another subclass outside the file. - Because of this, we know the sub-classes of a class by just analyzing a single file.
Animal.kt
package com.demo.subclasses
sealed class Animal {
object Cat : Animal() // We can define a Object classes like this
data class Dog(val name: String) : Animal() // We can define data classes like this
}
object Camel : Animal()
object Monkey : Animal()- In
kotlinclasses arefinalby default meaning they cannot be inherited by just extending. - We need to explicitly make them
opento be inherited. - Sealed classes fit between
finalandopen. This Final <------->Sealed classes<-------> Open - So sealed classes help in taking advantage of inheritance but in a limited format.
- This will ensure we don't end up with a massive long inheritance tree and not knowing easily where it's inherited by whom but here all the children are in the same class.
- Earlier we noticed that, If a
sealed classis inheriting anothersealed class, it has to be defined in the same file to restrict the hierarchy. - But say a
normal class, It can extend the sealed class even outside the file ofsealed class
Monkey.kt
class Monkey : Animal() {
init {
println("Initializing the monkey class")
}
}- If we mark the
member-functionandmember-variableprivate, no one outside the sealed class can access it. - No instance of sealed class also can access it if marked private.
