open class Outer { private class PrivateNested private inner class PrivateInner protected class ProtectedNested protected inner class ProtectedInner public class PublicNested public inner class PublicInner } class Derived : Outer() { fun foo() { Outer.PrivateNested() super.PrivateInner() Outer.ProtectedNested() super.ProtectedInner() Outer.PublicNested() super.PublicInner() } } fun foo() { Outer.PrivateNested() Outer().PrivateInner() Outer.ProtectedNested() Outer().ProtectedInner() Outer.PublicNested() Outer().PublicInner() }