Вложенные и внутренние классы в Kotlin

В это руководстве рассмотрим вложенные и внутренние классы в Kotlin.

Вложенный класс

Вложенный (Nested) класс — это такой класс, который создается внутри другого класса. В Kotlin вложенный класс по умолчанию является статическим, поэтому доступ к его члену данных и функции-члену можно получить без создания объекта класса. Вложенный класс не может получить доступ к элементу данных внешнего класса.

 
class outerClass{ 
   //outer class code 
    class nestedClass{ 
      //nested class code 
    } 
} 
 

Пример вложенного класса Kotlin

 
class outerClass{ 
    private var name: String = "Ashu" 
    class nestedClass{ 
var description: String = "code inside nested class" 
        private var id: Int = 101 
        fun foo(){ 
          //  print("name is ${name}") // cannot access the outer class member 
println("Id is ${id}") 
        } 
    } 
} 
fun main(args: Array){ 
// nested class must be initialize 
println(outerClass.nestedClass().description) // accessing property 
var obj = outerClass.nestedClass() // object creation 
    obj.foo() // access member function 
} 

Выход:

code inside nested class 
Id is 101 

Внутренний класс

Внутренний (Inner) класс в Котлин — это класс, созданный внутри другого класса с ключевым словом inner. Другими словами, мы можем сказать, что вложенный класс, помеченный как «внутренний», называется внутренним классом.

Внутренний класс нельзя объявлять внутри интерфейсов или невнутренних вложенных классов.

 
class outerClass{ 
   //outer class code 
    inner class innerClass{ 
      //nested class code 
    } 
} 

Преимущество внутреннего класса по сравнению с вложенным классом заключается в том, что он может получить доступ к членам внешнего класса, даже если он является закрытым. Внутренний класс хранит ссылку на объект внешнего класса.

Пример внутреннего класса Kotlin

 
class outerClass{ 
     private  var name: String = "Ashu" 
     inner class  innerClass{ 
var description: String = "code inside inner class" 
        private var id: Int = 101 
       fun foo(){ 
println("name is ${name}") // access the outer class member even private 
println("Id is ${id}") 
        } 
    } 
} 
fun main(args: Array){ 
println(outerClass().innerClass().description) // accessing property 
var obj = outerClass().innerClass() // object creation 
    obj.foo() // access member function 
 
} 

Выход:

code inside inner class 
name is Ashu 
Id is 101 

Оцените статью