Theoretical Paper
- Computer Organization
- Data Structure
- Digital Electronics
- Object Oriented Programming
- Discrete Mathematics
- Graph Theory
- Operating Systems
- Software Engineering
- Computer Graphics
- Database Management System
- Operation Research
- Computer Networking
- Image Processing
- Internet Technologies
- Micro Processor
- E-Commerce & ERP
- Dart Programming
- Flutter Tutorial
- Numerical Methods Tutorials
- Flutter Tutorials
- Kotlin Tutorial
Practical Paper
Industrial Training
Kotlin Sealed Class
Sealed class is a class which restricts the class hierarchy. A class can be declared as sealed class using "sealed" keyword before the class name. It is used to represent restricted class hierarchy.
Sealed class is used when the object have one of the types from limited set, but cannot have any other type.
The constructors of sealed classes are private in default and cannot be allowed as non-private.
Declaration of sealed class
sealed class MyClass
The subclasses of sealed classes must be declared in the same file in which sealed class itself.
sealed class Shape{ class Circle(var radius: Float): Shape() class Square(var length: Int): Shape() class Rectangle(var length: Int, var breadth: Int): Shape() object NotAShape : Shape() }
Sealed class ensures the important of type-safety by restricting the set of types at compile time only.
sealed class A{ class B : A() { class E : A() //this works. } class C : A() init { println("sealed class A") } } class D : A() //this works { class F: A() //This won't work,because sealed class is defined in another scope. }
A sealed class is implicitly an abstract class which cannot be instantiated.
sealed class MyClass fun main(args: Array) { var myClass = MyClass() //compiler error. sealed types cannot be instantiated. }
Sealed class with when
Sealed classes are commonly used with when expression. As the sub classes of sealed classes have their own types act as a case. Due to this, when expression in sealed class covers all the cases and avoid to add else clause.
For example:
sealed class Shape{ class Circle(var radius: Float): Shape() class Square(var length: Int): Shape() class Rectangle(var length: Int, var breadth: Int): Shape() // object NotAShape : Shape() } fun eval(e: Shape) = when (e) { is Shape.Circle ->println("Circle area is ${3.14*e.radius*e.radius}") is Shape.Square ->println("Square area is ${e.length*e.length}") is Shape.Rectangle ->println("Rectagle area is ${e.length*e.breadth}") //else -> "else case is not require as all case is covered above" // Shape.NotAShape ->Double.NaN } fun main(args: Array< String>) { var circle = Shape.Circle(5.0f) var square = Shape.Square(5) var rectangle = Shape.Rectangle(4,5) eval(circle) eval(square) eval(rectangle) }
Output:
Circle area is 78.5 Square area is 25 Rectagle area is 20