Classes can be nested in other classes:
{jet}
class Outer() {
  private val bar : Int = 1
  class Nested() {
    fun foo() = 2
  }
}

val demo = Outer.Inner().foo() // == 2
{jet}

h3. Inner classes

A class may be marked as *inner* to be able to access members of outer class. Inner classes carry a reference to an object of an outer class:

{jet}
class Outer() {
  private val bar : Int = 1
  inner class Inner() {
    fun foo() = bar
  }
}

val demo = Outer().Inner().foo() // == 1
{jet}

See [Qualified *this* expressions|This expressions#Qualified] to learn about disambiguation of *this* in inner classes.

{note:title=Inner classes are under development}See the corresponding [issue|http://youtrack.jetbrains.com/issue/KT-1174].{note}

h3. What's next

* [Object expressions and Declarations]