Nested and Inner classes are two important concepts in Kotlin that allow developers to organize and structure their code in a more effective way. In this blog, we’ll explore these concepts and understand how they can be used in Kotlin.
Nested Classes
A nested class is a class that is defined inside another class. It is also known as a static inner class
, as it is not tied to any specific instance of the outer class. This means that a nested class can be accessed without creating an instance of the outer class.
To define a nested class in Kotlin, we use the class
keyword inside the body of the outer class.
For Example, to defined a nested class called NestedClass
inside the OuterClass
,
class OuterClass {
class NestedClass {
fun doSomething(){
//I'll do something
}
}
}
Note that the nested class cannot access the properties and methods of the outer class directly.
class OuterClass {
private val outerProperty = "Outer property"
class NestedClass {
fun printOuterProperty() {
<e>// This won't compile because the nested class cannot access the outer property</e>
// println(outerProperty)
}
}
}
If we try to access the outerProperty
inside the printOuterProperty()
method, it will result in a compilation error.
Inner Classes
An inner class is a class that is defined inside another class, but it has access to the properties and methods of the outer class. This means that an instance of the inner class is tied to an instance of the outer class. In Kotlin, we use the inner
keyword to define an inner class.
class OuterClass {
private val outerProperty = "Outer property"
inner class InnerClass {
fun printOuterProperty() {
// We can access the outer property because this is an inner class
println(outerProperty)
}
}
}
In the example above, we have defined an inner class called InnerClass
inside the OuterClass
. Note that we have used the inner
keyword to define the inner class. Inside the printOuterProperty()
method, we can access the outerProperty
because this is an inner
class.
Nested vs Inner Classes
- The key difference between nested and inner classes is the access to the properties and methods of the outer class. A
nested class
cannot access the properties and methods of the outer class directly, while aninner class
can. - Another difference is that a
nested class
isstatic
, while aninner class
is tied to an instance of the outer class.
When to use Nested and Inner Classes
Nested and inner classes can be used in different scenarios based on their differences. A nested class
is useful when we want to group related classes together, but the nested class
doesn’t need access to the properties and methods of the outer class. On the other hand, an inner class
is useful when we want to create a class that is closely related to the outer class and needs access to its properties and methods.
Conclusion
A nested class
is a class that is defined inside another class and is static
, while an inner class
is a class that is defined inside another class and has access to its properties and methods. We can use nested classes to group related classes together, while we use inner classes to create classes that are closely related to the outer class.