-
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
Animal
forCamel
andMonkey
but it's defined in the same file. If we try to inherit in another file, it will not work. - What the
sealed
modifier
does 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
kotlin
classes arefinal
by default meaning they cannot be inherited by just extending. - We need to explicitly make them
open
to be inherited. - Sealed classes fit between
final
andopen
. 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 class
is 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-function
andmember-variable
private, no one outside the sealed class can access it. - No instance of sealed class also can access it if marked private.