-
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, 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()
- If we use
when
option, the compiler will recommend all theoptions(subclasses)
of the sealed class state.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val catData = getCats()
when(catData){
is Camel -> { /* Some logic */ }
is Animal.Cat -> { /* Some logic */ }
is Animal.Dog -> { /* Some logic */ }
is Monkey -> { /* Some logic */ }
}
}
fun getCats() : Animal { return Animal.Cat }
}
- 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 its inherited by whom but here all the children are in same class.